| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Создание таймера не в основном потоке |
| Автор: andov 30.4.2008, 10:41 |
| Есть ли разница в создании callback-ов для функции ::SetTimer Создаю таймер в основном потоке, callback вызывается без проблем Создаю таймер в дополнительном потоке не вызывается. NB: дополнительный поток всегда стоит в ожидании событий WaitForMultipleObjects отработав событие возворащается опять в ожидание. События проходят асинхронно (в общем события COM-порта). Как заставить отработать колбэк? |
| Автор: xvr 30.4.2008, 12:27 | ||||
Цитата из MSDN:
Однако, если есть WaitForMultipleObjects то вместо SetTimer можно использовать CreateWaitableTimer и вызывать свой callback вручную, или вообще поставить timeout для WaitForMultipleObjects и вызывать callback по нему |
| Автор: andov 30.4.2008, 14:02 | ||
Я уже над этим думал, если использовать CreateWaitableTimer и WaitForMultipleObjects, то не понятно как передать хендл инициатору события Спасибо |
| Автор: andov 30.4.2008, 17:31 | ||||
| Сделал с WaitableTimer -ом Получился глюк следующего содержания. Пока не пришло событие от WaitableTimer-а Функция WaitCommEvent работает нормально, но после отработки события по таймеру GetLastError() воздращает код 87 (не верный параметр) для функции WaitCommEvent. Запуск таймера выполняется при определенном сочетании данных приходящик от ком порта. запуск имеет вид:
С чем это может быть связано?
|
| Автор: xvr 30.4.2008, 17:52 | ||
Может потому что предыдущий WaitCommEvent не завершился и до сих пор находится в состоянии Overlapped I/O? Попробуй вызвать SetCommMask и GetOverlappedResult при срабатывании таймера, или позвать CancelIo |
| Автор: andov 5.5.2008, 09:52 | ||||||||
| Постоянно генерится таймер. Не останавливается Мой алгоритм 1. Создаю таймер
2. В цикле ожидаю события от порта, таймера и еще одно событие на завершение потока(всего 3) 3. По определенному условию запускаем таймер
4. Если приходит событие от порта обрабатываю так:
5. Если событие от таймера, то так(сброс таймера):
6. и далее переходим к п.2 Проблема в следующем деже если я делаю CancelWaitableTimer(hEvents[2]), событие продолжает генерироваться. Как его остановить? |
| Автор: andov 5.5.2008, 14:33 | ||
| Убрал генерацию создаю таймер с bManualReset = false
|