Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не могу сделать таймер 
:(
    Опции темы
jofy
Дата 1.1.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 23.11.2008
Где: Украина, Севастоп оль

Репутация: нет
Всего: нет



Здравствуйте, пишу на VC++ нужно сделать таймер, я его описываю, только не могу понять как связать его с процедурой которую он будет выполнять по истечению времени, в MFC нужно просто добавить сообщение WM_TIMER, а в консольном приложении даже не знаю. 
PM MAIL ICQ   Вверх
Romikgy
Дата 1.1.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Код

UINT SetTimer(

    HWND hWnd,    // handle of window for timer messages
    UINT nIDEvent,    // timer identifier
    UINT uElapse,    // time-out value
    TIMERPROC lpTimerFunc    // address of timer procedure
   );
lpTimerFunc

Points to the function to be notified when the time-out value elapses. For more information about the function, see TimerProc. 
If lpTimerFunc is NULL, the system posts a WM_TIMER message to the application queue. The hwnd member of the message's MSG structure contains the value of the hWnd parameter. 

 VOID CALLBACK TimerProc(

    HWND hwnd,    // handle of window for timer messages 
    UINT uMsg,    // WM_TIMER message
    UINT idEvent,    // timer identifier
    DWORD dwTime    // current system time
   );    
 

Parameters

hwnd

Identifies the window associated with the timer. 

uMsg

Specifies the WM_TIMER message. 

idEvent

Specifies the timer's identifier. 

dwTime

Specifies the number of milliseconds that have elapsed since Windows was started. This is the value returned by the GetTickCount function. 

юзай эту ф-цию


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
xvr
Дата 5.1.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Только учти, что для того, что бы SetTimer работала, твоя программа должна крутить цикл обработки сообщений (GetMessage/DispatchMessage), что для консольных программ обычно не делается  smile 
PM MAIL   Вверх
Romikgy
Дата 5.1.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



xvr, не обязательно , я как раз и указал , что бы таймер не сообщение кидал , а вызывал колбек функцию, для консоли самый раз , и без создания очереди сообщений или окна


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
xvr
Дата 5.1.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Romikgy @ 5.1.2009,  16:44)
xvr, не обязательно , я как раз и указал , что бы таймер не сообщение кидал , а вызывал колбек функцию, для консоли самый раз , и без создания очереди сообщений или окна

Обязательно, даже для callback функции нужно крутить цикл выборки сообщений, иначе не работает  smile 
MSDN:
Цитата

An application can process WM_TIMER messages by including a WM_TIMER case statement in the window procedure or by specifying a TimerProc callback function when creating the timer. When you specify a TimerProc callback function, the default window procedure calls the callback function when it processes WM_TIMER. Therefore, you need to dispatch messages in the calling thread, even when you use TimerProc instead of processing WM_TIMER. 

PM MAIL   Вверх
Romikgy
Дата 5.1.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



странно а раньше у мя работало без цикла сообщений , а сейчас в колбек ф-цию даже не входит 
(хммм как у мя получалось раньше?  smile )


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
xvr
Дата 5.1.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Romikgy @ 5.1.2009,  19:07)
странно а раньше у мя работало без цикла сообщений , а сейчас в колбек ф-цию даже не входит 
(хммм как у мя получалось раньше?  smile )

Ну например, кто то этот цикл все же крутил. В Винде довольно много таких мест, которые это делают сами (например функция MessageBox  smile )
PM MAIL   Вверх
GoldFinch
Дата 5.1.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



можно в отдельном потоке выполнять нужный код а затем Sleep() на оставшееся время:

int t0,t1,dt;
int T=16; //период
for(;;) {
  t0=GetTickCount();
  ...
  t1=GetTickCount();
  dt=T - (t1-t0);
  if (dt>0) Sleep(dt);
};
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0897 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.