pls, подскажите как создать событие OnTimer в консоли
Timer
Автор PITSOFT, 25.12.2004, 22:26
#4
Отправлено 27.12.2004, 20:39:41
на самом деле проблема чуть глубже: в консольном случае нет привычного выгребателя очереди сообщений, поэтому callback функцию некому будет вызвать
в мультимедиа таймерах всё реализовано по другому: там винда создаёт некий пульсирующий event и высокоприоритетный поток, в котором крутит callback функцию, переходя после каждого вызова в ожидание события. Так что получается полностью всё отвязано от очереди сообщений, поэтому граблей с консолью не возникает. Но требуется иметь в виду, что в этом уже имеем многопоточность со всеми вытекающими требованиями
#include <windows.h> #include <stdio.h> VOID CALLBACK TimerProc(HWND, UINT, UINT_PTR, DWORD dwTime) { printf("what a strange day...."); } void main() { SetTimer(NULL, 1, 1000, TimerProc); getchar(); KillTimer(NULL, 1); }
в мультимедиа таймерах всё реализовано по другому: там винда создаёт некий пульсирующий event и высокоприоритетный поток, в котором крутит callback функцию, переходя после каждого вызова в ожидание события. Так что получается полностью всё отвязано от очереди сообщений, поэтому граблей с консолью не возникает. Но требуется иметь в виду, что в этом уже имеем многопоточность со всеми вытекающими требованиями
#5
Отправлено 27.12.2004, 20:55:56
хотя в общем-то никто, конечно, не запрещает самому написать выгребалку очереди и тогда SetTimer тоже будет работать.
#include <windows.h> #include <stdio.h> int times = 0; VOID CALLBACK TimerProc(HWND, UINT, UINT_PTR, DWORD dwTime) { printf("tick %d\n", ++times); } void main() { SetTimer(NULL, 1, 1000, TimerProc); MSG msg; while( times < 10 ) { GetMessage( &msg, NULL, 0, 0 ); DispatchMessage(&msg); } KillTimer(NULL, 1); }
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0