注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dingchaoqun12 的博客

上海股票期货开户

 
 
 

日志

 
 
 
 

Console程序中使用SetTimer?!_      _百度空间  

2012-04-18 13:56:44|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Console程序中使用SetTimer?!
2006年08月17日 15:56

首先看一下SetTimer函数的原型:

UINT_PTR SetTimer(      

    HWND hWnd,     UINT_PTR nIDEvent,     UINT uElapse,     TIMERPROC lpTimerFunc );
大家知道Console程序是没有HWND的,而却MSDN上还清清楚楚地写着
hWnd
[in] Handle to the window to be associated with the timer. This window must be owned by the
calling thread. If this parameter is NULL, no window is associated with the timer and the
nIDEvent parameter is ignored.

这样nIDEvent 也没有作用了,不过既然hWnd参数可以为NULL,我们不妨试验一下:

VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime);

::SetTimer(NULL,NULL,3000,(TIMERPROC)TimerProc);

VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
  printf("1");
}

结果发现根本就不打印111,粗想一下,大约是因为函数主体SetTimer之后就结束的关系,系统自动发送了个KillTimer...于是在SetTimer之后加了句话:MessageBox(*****),呵呵,居然好使了!可是控制台程序有这么一个对话框真的不好,于是把MessageBox(*****)改成while(1){***},可是Timer居然又没有反应了,改来改去,发现MessageBox(*****)就好用,while(1){***}就不行,又试了一下什么systemPause什么的,都不行,为什么只有MessageBox好用呢?百思不得其解!去CSDN上看了下,没有一个说得清楚的,翻了下MSDN2005,跟上面的介绍一样,然后看到下面有一个链接"

For an example, see Creating a Timer."MSDN上的好多例子都非常的经典,于是我就点了过去,这一下真看到想要的了:

//==========================================================================================

HWND hwndTimer;   // handle to window for timer messages   MSG msg;          // message structure          while (GetMessage(&msg, // message structure               NULL,           // handle to window to receive the message               NULL,           // lowest message to examine               NULL)          // highest message to examine              != 0 && GetMessage(&msg, NULL, NULL, NULL) != -1)      {              // Post WM_TIMER messages to the hwndTimer procedure.              if (msg.message == WM_TIMER)           {               msg.hwnd = hwndTimer;           }              TranslateMessage(&msg); // translates virtual-key codes           DispatchMessage(&msg);  // dispatches message to window       } 
//===============================================================================
呵呵,真厉害,竟然在Console程序里加上消息循环!稍加修改,把MessageBox替换调,好使!
希望对大家也有所帮助:)




引文来源  Console程序中使用SetTimer?!_      _百度空间
  评论这张
 
阅读(690)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017