Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > таймер


Автор: Robin 5.5.2007, 09:22
нужно сделать таймер, который по истечении N времени сделает printf("rimer test successful" );
какие функции юзать? если просто взять локалтайм, то будет геморно проверять каждый раз время, так как если таймер будет на несколько часов, придется каждые несколько минут сверять время

Автор: ama_kid 5.5.2007, 10:12
Две статьи о таймерах: http://msdn2.microsoft.com/en-us/library/ms644900.aspx и http://msdn2.microsoft.com/en-us/library/ms644901.aspx
Правда, для приложений без цикла обработки сообщений (консольных) - http://support.microsoft.com/kb/102482. Имхо надо использовать http://msdn2.microsoft.com/en-us/library/ms724408.aspx

Автор: Snowy 5.5.2007, 11:00
А просто Sleep не подойдёт?

Автор: archimed7592 5.5.2007, 11:14
вполне себе кросс-платформенное решение на с++:
Код
boost::xtime tm;
boost::xtime_get (&tm, boost::TIME_UTC);
tm.sec += 3600 * 5; // 5 hours
boost::thread::sleep (tm);

Автор: -Kp0T- 5.5.2007, 12:12
Задержка в 1000 мс:
Код

...
HANDLE hFake=CreateEvent(0,true,false ,"Fake");
WaitForSingleObject(hFake,1000);
...
CloseHandle(hFake);

Автор: dumb 5.5.2007, 14:04
Цитата(-Kp0T- @  5.5.2007,  12:12 Найти цитируемый пост)
WaitForSingleObject(hFake,1000);

smile
чем Sleep-то не угодил?

Автор: -Kp0T- 6.5.2007, 01:23
Цитата(dumb @ 5.5.2007,  12:04)
smile
чем Sleep-то не угодил?

Sleep() - тоже фунцкия, просто предложил альтернативу. Да простят меня модераторы... smile 

Автор: Kornev 6.5.2007, 04:18
А почему не подходит Win32 Project, Typical "Hello Word" Application, и стандартные пара строчек:
В самом верху    
#define IDT_TIMER1 1111111111111
#define IDT_TIMER2 2222222222222

И в цикле обработки сообщений

case WM_CREATE:
SetTimer(hWnd,IDT_TIMER1,5001,(TIMERPROC) NULL); 
SetTimer(hWnd,IDT_TIMER2,8000,(TIMERPROC) NULL);
break;

case WM_TIMER: 
 
    switch (wParam) 
    { 
        case IDT_TIMER1:
MessageBox(hWnd, "11", "11", IDOK);
         return 0; 
 
        case IDT_TIMER2:
MessageBox(hWnd, "22", "22", IDOK);        
         return 0; 
    } 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)