Win32控制台程序的定时器实现

在论坛上常有问及在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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值