2016-03-22 2 views
-1

Я использую датчик для запуска таймера. Я хочу изменить значение таймера каждый раз, когда таймер истекает. код, как показано ниже:Невозможно изменить значение датчика

#include<iostream> 
#include <windows.h> 
#include <stdio.h> 
#include<WinUser.h> 
#pragma comment(lib, "user32.lib") 


    void main() 
    { 

     int id = 1; 
     static bool isStart = false; 
     static long l = 10000; 
     while(1) 
     { 
      int n; 
      MSG msg = {0}; 

      { 

       SetTimer(NULL, id,l,NULL); 

       while(GetMessage(&msg,NULL, 0,0)) 
       { 
        // Post WM_TIMER messages to the hwndTimer procedure. 
        if (msg.message == WM_TIMER) 
        { 
         std::cout << "Timer expired"; 
         KillTimer(NULL, id); 
         msg.message = 0x0; 
         l = 20000; 
         break; 
        } 
       } 
      } 
     } 

    } 

Даже если я изменить значение до 20000 его не принимает, таймер устанавливается только один раз. Нужна помощь по этому вопросу.

Благодаря

+0

Я думаю, что ваши сообщения 'msg' не отправляются в окно. Почему бы не включить 'DispatchMessage (&msg);' в 'петле GetMessage'? Кроме того, что потребность' #include 'когда вы' #include '? – ubuntugod

+0

Я использовал DispatchMessage (&msg); еще ее не работает – anonymous

+0

где вы добавить его? – ubuntugod

ответ

2

Вы должны использовать возвращаемое значение SetTimer, чтобы убить таймер

int main(int argc, char **argv) 
{ 
    static bool isStart = false; 
    static long l = 5000; 
    while(1) 
    { 
     int n; 
     MSG msg = {0}; 

     UINT_PTR p = SetTimer(NULL, 0,l,NULL); 

     while(GetMessage(&msg,NULL, 0,0)) 
     { 
    // Post WM_TIMER messages to the hwndTimer procedure. 
      if (msg.message == WM_TIMER) 
      { 
       std::cout << "Timer expired" << std::endl; 
       KillTimer(NULL, p); 
       msg.message = 0x0; 
       l = 20000; 
       break; 
      } 
     } 
    } 
} 

SetTimer Из MSDN

Возвращаемое значение

Тип: Тип: UINT_PTR If функция завершается успешно, а параметр hWnd равен NULL, возвращаемое значение - это intege r идентифицирует новый таймер. Приложение может передать это значение функции KillTimer, чтобы уничтожить таймер.

+0

Спасибо, так много его работы сейчас – anonymous

+1

@Sneha: Если ответ полностью решает вашу проблему, вы должны принять его. Это облегчит будущим посетителям возможность быстро найти co правильное решение. – IInspectable

+0

@Inpectable Я уже ответил, что ответ был полезен, и теперь он работает, см. Комментарий – anonymous

Смежные вопросы