![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| RaIDeR |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 20.6.2005 Репутация: 1 Всего: 4 |
Здравствуйте ! Помогите составить алгоритм который выведет
в memo от 0 до 255 в двоичной системе т.е от 00000000 до 11111111. Как бы это всё зациклить ... просто ручками писать долго Заранее благодарен. |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: нет Всего: 44 |
вот черкнул тебе программку правда на С(первести думаю не сложно будет тк в ней нет ни чего...)
или так еще можно (n & (1 << i)) просьба модераторам не бить за код на С Это сообщение отредактировал(а) chaos - 21.7.2005, 12:46 |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
-------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 2 Всего: 74 |
А теперь весь этот код впиши в Thread и будешь рад не тормозящей программе.
-------------------- Всем добра |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
SoWa, все ради вас
PS. Только у меня и предыдущий код не сильно уж вешал прогу. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| RaIDeR |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 20.6.2005 Репутация: 1 Всего: 4 |
Спасибо всем большое !
|
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Poseidon, да будет Вам известно что VCL не реентерабельна! А посему, подобное использование ее компонентов (Form1.Memo1.Lines.Add(IntToStr(a))) внутри не не основного потока НЕ ДОПУСТИМО! Это приводит к возникновению трудно выявимых ошибок. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Увы, обязательно! Дело в том, что человек после учебы на "простом" примере, будет переносить такой подход и на сложные примеры, и на реальные программы. А ошибки в мультипоточных приложениях тем и плохи, что у автора на компе это может ввоще ни разу не привести в ошибкам, а у пользователя - нате вам. Но, даже если и у автора будут возникать ошибки, то лишь время от времени. По собственному опытку знаю - ловить такие ошибки крайне тяжело, практически невозможно. Только полным переписыванием программы! Вот например, сейчас вынужден держать отключенным режим Hyper-Threading у своего компа только лишь потому что автор одиной из программ которой я пользуюсь не позаботился о потокобезопасности кода в своей программе. Вот и происходит что при загрузке он даже ось умудряется поставить ра*ом. Причем, автор не доступен, и отказаться от проги пока не могу Это сообщение отредактировал(а) Girder - 22.7.2005, 13:18 -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Петрович, если не лень, приведи пример правильного кода. А то водать так со мной и приключилось:
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Ща некогда. Вечерком постараюсь набросать. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Marriage |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 4.5.2004 Где: Таганрог Репутация: нет Всего: 2 |
Петрович
Всегда пользовался методом
Это являеться привильным ????? -------------------- Praemonitus, praemunitus |
|||
|
||||
| Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Вот набросал тут немного. Так правильно?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Петрович |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Ну вот. Не прошло и полгода как я вернулся
Нет. Увы, ты совершил довольно распространенную ошибку! Эту ошибку впервые я увидел в статье какого-то горе программиста. Жаль что она была прочитана многими. Суть ошибки в следующем. Как указано в описании метода Synchronize, тело метода переданного в качестве параметра, выполняется в контексте основного потока программы. Теперь, если посмотреть твой код, то вся работа выполняется в методе MemoAdd. А он, в свою очередь, и был передан как параметр при вызове Synchronize. Следовательно, вся работа будет выполняться в контексте основного потока. Т.е. весь смысл использования дополнительного потока теряется! На самом деле, вся трудоемкая работа должна выполняться в Execute. А Synchronize вызываться только для доступа к методам и свойствам VCL-компонентов. Правильный код будет выглядеть так:
Это правильный метод, рекомендуемый Borland. Однако, как всегда не единственный. Например, есть одна интересная особенность процедуры SendMessage. Дело в том, что эта процедура обеспечивает "синхронный" вызов соответствующей оконной процедуры для обработки посылаемого сообщения. А тонкость в том, что вызов оконной процедуры осуществляется в контексте потока создавшего окно, вне зависимости от контекста потока вызвавшего SendMessage. Обеспечивается это самой Windows. Если же знать что все формы Delphi программа создает в контексте основного потока, то этим можно воспользоваться. Вот что мы можем получить в результате:
В данном примере я специально не использовал тип tThread дабы продемонстрировать использование потоков через WinAPI. Обратите внимание на следующее: 1. Функция потока это именно function которая может возвращать результат. Кроме того, она имеет один параметр, и использует способ передачи параметров stdcall 2. Хендл потока возвращаемый CreateThread должен обязательно закрываться как только становится не нужным. Иначе, будут теряться ресурсы системы, естественно в рамках вашего процесса. В общем, я затронул лишь один из аспектов многопоточных приложений. Белее подробно, рекомендую ознакомиться со статьей: Многопоточность - как это делается в Дельфи. (Перевод статьи "Martin Harvey. Multithreading - The Delphi Way." сделанный Борисом Новгородовым) Это просто ОТЛИЧНАЯ статья. Добавлено @ 09:41 Да, кстати. Совсем забыл. Под Delphi, вместо лучше CreateThread использовать BeginThread Это сообщение отредактировал(а) Girder - 26.7.2005, 16:10 -------------------- Все знать невозможно, но хочется |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |