请问控制台程序如何用定时器功能?

解决方案 »

  1.   

    http://blog.csdn.net/youyulangzi/archive/2010/08/26/5841199.aspx
      

  2.   

    利用多线程、回调函数
    http://blog.csdn.net/firebird321/archive/2008/09/16/2938611.aspx
      

  3.   

    #include "stdafx.h"
    #include <windows.h>DWORD WINAPI ThreadProc(  LPVOID lpParameter )//方法1
    {
    static DWORD tick=0;
    DWORD tmp = GetTickCount();
    while(1)
    {   
    tick = GetTickCount()-tmp;//获得系统从启动开始到现在的ms数
    tmp = GetTickCount();
    printf("THREAD_PROC: abc %d, tickcount: %d\n",tick,tmp);//打印abc和上次打印到这次打印之间的毫秒间隔。
    Sleep(1000);//每隔1000ms打印abc
    }
    }
    VOID  TimerProc()//方法2
    {   
    static DWORD tick=0;
    static DWORD tmp = GetTickCount();
     
    tick = GetTickCount()-tmp;
    tmp = GetTickCount();
    printf(" TimerProc________________def %d\n",tick);}
    int main()
    {
    DWORD dwthread; 
        ::CreateThread(NULL,0,ThreadProc,(LPVOID)0,1024,&dwthread);
    //生成一个线程,在该线程里每1000ms输出一个"abc",然后SLEEP
    SetTimer(0,0,1000,0);//设置一个定时器,定时器的回调函数为0,
    //仅产生定时器消息,在main函数里捕捉该消息
    MSG msg;
    bool flag;
        
    while(1)//该循环捕捉定时器消息,并且防止main函数退出
    {
    PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE); 
    while( (flag = GetMessage( &msg, NULL, 0, 0 )) != 0) 
    {   
      if (flag == -1) 
      { 
       // handle the error and possibly exit 
      } 
      else if(msg.message==WM_TIMER) 
      { 
      TimerProc();//如果是定时器消息,调用timerproc   } 
      else 
      { 
       TranslateMessage(&msg);   
       DispatchMessage(&msg);   
      } 

    }}