![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Гость_space |
|
||||
|
Unregistered |
Вопрос к знатокам потоков.
Попробовал работать с Com-портом, как это описывается в статье "Работа с COM-портами под Windows" (Автор статьи: Pasha). Кстати, спасибо ему большое. Там создаётся поток для приёма с порта вот так:
А сама процедура приёма вот такая:
Всё работает, только из-за вечного цикла в этой процедуры пожираются все ресурсы процессора. А как этого избежать? Как заставить процедуру выполняться только по событию? Ну, в смысле, по приёму символа. Это сообщение отредактировал(а) Alex - 25.3.2005, 23:45 |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
я может чего-то не понимаю, но в этом коде есть ожидание события...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Гость_space |
|
|||
|
Unregistered |
Вот - вот! Почему - то ожидание события и пожирает ресурсы!
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
ну дай ему приоритет пониже...
+ попробуй запустить без потока и посмотри как себя код ведет... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Гость_space |
|
|||
|
Unregistered |
Сделал экскремент, в результате чего выяснилось, что WaitCommEvent и не думает ничего ждать, а возвращает "0" если нет события и флаг события, если оно произошло. Вот фигня!
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
во первых вызови GetLastError() -- узнаеш в чем вообще проблема
+ есть подозрение что проблема в маске -- EvtMask, равной 0 я не нашел... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Гость_space |
|
|||
|
Unregistered |
2hunter
Вызвал GetLastError() - ошибки то нет! Так что такая вот WaitCommEvent, совсем она ничего и не wait... Поэтому вставил я просто sleep(10) в цикл ожидания и всё стало просто изумительно - всё работает и ресурсов не жрёт. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
В WaitCommEvent последний параметр должен быть nil, иначе у тебя не синхронное ожидание, а асинхронное (если порт открыт с флагом OVERLAPPED), (т.е. никакого ожидания не будет, если не ждать события Wait...Object)...
То же самое касается ReadFile... -------------------- С уважением, г-н Посол. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
Перенесенно из раздела Delphi
-------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |