读书人

控制台用SetTimer有关问题

发布时间: 2012-03-16 16:34:56 作者: rapoo

控制台用SetTimer问题
Code1:

C/C++ code
#include <stdio.h>#include <windows.h>#define ID_TIMER 0VOID CALLBACK TimerProc(HWND, UINT, UINT, DWORD);int main(int argc, char * argv[]){    int ch = 0;    int iId;        iId = SetTimer(NULL, ID_TIMER, 3000, TimerProc);    printf("Enter 'q' quit!\n");    while(ch != 'q')    {        scanf("%c", &ch);    }    KillTimer(NULL, iId);    return 0;}VOID CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTimer){    MessageBox(NULL, "Hello World!", "Test", MB_OK);}


Code2:
C/C++ code
#include <stdio.h>#include <windows.h>#define ID_TIMER 0VOID CALLBACK TimerProc(HWND, UINT, UINT, DWORD);int main(int argc, char * argv[]){    int ch = 0;    int iId;        iId = SetTimer(NULL, ID_TIMER, 3000, TimerProc);    printf("Enter 'q' quit!\n");    while(1)    {        Sleep(1000);    }    KillTimer(NULL, iId);    return 0;}VOID CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTimer){    MessageBox(NULL, "Hello World!", "Test", MB_OK);}

我在控制台下用SetTimer,刚开始写的Code1,不弹MessageBox,我以为是scanf那里暂停了,后来我改成了Code2,还是不弹啊?怎么搞?请指教

[解决办法]
你的 ID_TIMER =0SetTimer的函数原型如下:
UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ) ;
  其中
  hWnd是和timer关联的窗口句柄,此窗口必须为调用SetTimer的线程所有;如果hWnd为NULL,没有窗口和timer相关联并且nIDEvent参数被忽略
  nIDEvent是timer的标识,为非零值;如果hWnd为NULL则被忽略;如果hWnd非NULL而且与timer相关联的窗口已经存在一个为此标识的timer,则此次SetTimer调用将用新的timer代替原来的timer。timer标识和窗口相关,两个不同的窗口可以拥有nIDEvent相同的tiemr
  uElapse是以毫秒指定的计时间隔值,范围为1毫秒到4,294,967,295毫秒(将近50天),这个值指示Windows每隔多久时间给程序发送WM_TIMER消息。
  lpTimerFunc是一个回调函数的指针,俗称TimerFunc;如果lpTimerFunc为NULL,系统将向应用程序队列发送WM_TIMER消息;如果lpTimerFunc指定了一个值,DefWindowProc将在处理WM_TIMER消息时调用这个lpTimerFunc所指向的回调函数,因此即使使用TimerProc代替处理WM_TIMER也需要向窗口分发消息。


  关于SetTimer的返回值:如果hWnd为NULL,返回值为新建立的timer的ID,如果hWnd非NULL,返回一个非0整数,如果SetTimer调用失败则返回0


[解决办法]
SetTimer需要消息处理来调用你指定的响应函数( DefWindowProc ),所以 如果你的程序中没有消息处理 那就不会调用相关函数

找到个资料 你看看
http://blog.163.com/tangmin927@126/blog/static/31537494200961534820781/
[解决办法]
响应timer需要楼主自己写消息循环

读书人网 >C语言

热点推荐