正文

Win32控制台程序的定时器实现2007-10-02 19:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bills/29793.html

分享到:

在论坛上常有问及在console下能否像在MFC一样用SetTimer设置定时器,他们往往得到的回答是“不能”,或者顶多给个多媒体定时器例子你,其实win32 console程序跟一般的win 32程序并没有什么多大的区别,只是它更擅长于文本命令输入输出,一般win32程序能做的事win32 console程序也可以做到的,然而似乎初学者甚至是做了多年VC开发的的”老鸟“总是感到一阵”恐慌“,他们就开始发问了:“哪个黑黑的控制台程序也能有消息循环吗?我们能给它投递消息吗?”.........

在控制台中使用定时器不能简单的SetTimer了事,这在控制台里这种SetTimer的方式是有点麻烦的,需要自己写消息循环投递WM_TIMER消息。其实在控制台里可以使用多媒体时钟来计时: 

example: 

//启动计时器 
MMRESULT nIDTimerEvent = timeSetEvent( 
  1000,//延时1秒 
   0, 
  TimeProc, 
  0, 
  (UINT)TIME_PERIODIC); 
if( nIDTimerEvent == 0 ) 
  cout<<"启动计时器失败"<<endl; 


//回调过程(时钟到来,回调函数被系统自动调用) 
void CALLBACK TimeProc( 
  UINT uID,       
  UINT uMsg,     
  DWORD dwUser,   
  DWORD dw1,     
  DWORD dw2       


  cout<<"时钟到来"<<endl; 
   

 
当然了,你要是习惯于SetTimer,那就用SetTimer吧:
下面是我在Console下用SetTimer写的一个例子:
#include <windows.h>
#include <iostream>
using namespace std;
void CALLBACK TimeProc( 
    HWND hwnd,       
    UINT message,     
    UINT idTimer,     
    DWORD dwTime);
int main()
{
 SetTimer(NULL,1,1000,TimeProc);
 MSG   msg;   
 while(GetMessage(&msg,NULL,0,0))   
 {   
  if(msg.message==WM_TIMER)   
  {   
   DispatchMessage(&msg);   
  }   
 }   
 return 0;
}
void CALLBACK TimeProc( 
    HWND hwnd,       
    UINT message,     
    UINT idTimer,     
    DWORD dwTime)   
{
   cout<<"a timer comming"<<endl;
}

阅读(10815) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册