![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| andov |
|
|||
|
programmer Профиль Группа: Участник Сообщений: 7 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
Есть ли разница в создании callback-ов для функции ::SetTimer
Создаю таймер в основном потоке, callback вызывается без проблем Создаю таймер в дополнительном потоке не вызывается. NB: дополнительный поток всегда стоит в ожидании событий WaitForMultipleObjects отработав событие возворащается опять в ожидание. События проходят асинхронно (в общем события COM-порта). Как заставить отработать колбэк? |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Цитата из MSDN:
Однако, если есть WaitForMultipleObjects то вместо SetTimer можно использовать CreateWaitableTimer и вызывать свой callback вручную, или вообще поставить timeout для WaitForMultipleObjects и вызывать callback по нему |
||||
|
|||||
| andov |
|
|||
|
programmer Профиль Группа: Участник Сообщений: 7 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
Я уже над этим думал, если использовать CreateWaitableTimer и WaitForMultipleObjects, то не понятно как передать хендл инициатору события Спасибо |
|||
|
||||
| andov |
|
||||
|
programmer Профиль Группа: Участник Сообщений: 7 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
Сделал с WaitableTimer -ом
Получился глюк следующего содержания. Пока не пришло событие от WaitableTimer-а Функция WaitCommEvent работает нормально, но после отработки события по таймеру GetLastError() воздращает код 87 (не верный параметр) для функции WaitCommEvent. Запуск таймера выполняется при определенном сочетании данных приходящик от ком порта. запуск имеет вид:
С чем это может быть связано?
Это сообщение отредактировал(а) andov - 30.4.2008, 17:35 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Может потому что предыдущий WaitCommEvent не завершился и до сих пор находится в состоянии Overlapped I/O? Попробуй вызвать SetCommMask и GetOverlappedResult при срабатывании таймера, или позвать CancelIo |
|||
|
||||
| andov |
|
||||||||
|
programmer Профиль Группа: Участник Сообщений: 7 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
Постоянно генерится таймер. Не останавливается
Мой алгоритм 1. Создаю таймер
2. В цикле ожидаю события от порта, таймера и еще одно событие на завершение потока(всего 3) 3. По определенному условию запускаем таймер
4. Если приходит событие от порта обрабатываю так:
5. Если событие от таймера, то так(сброс таймера):
6. и далее переходим к п.2 Проблема в следующем деже если я делаю CancelWaitableTimer(hEvents[2]), событие продолжает генерироваться. Как его остановить? Это сообщение отредактировал(а) andov - 5.5.2008, 09:55 |
||||||||
|
|||||||||
| andov |
|
|||
|
programmer Профиль Группа: Участник Сообщений: 7 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
Убрал генерацию
создаю таймер с bManualReset = false
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |