现在的位置: 首页 > 综合 > 正文

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

2013年09月11日 ⁄ 综合 ⁄ 共 1122字 ⁄ 字号 评论关闭

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

http://www.programfan.com/blog/article.asp?id=29793

 

http://www.cppblog.com/alantop/archive/2012/07/01/180999.html

 

抱歉!评论已关闭.