急!VC中怎样加定时器与后台运行的Thread中?

vcfaq 2000-03-01 02:50:00
VC中要加一个后台定时检测的Thread,请问各路豪杰,有什么好办法?
Thanks!
...全文
603 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
abentu 2000-06-29
  • 打赏
  • 举报
回复
WaitForSingleObject不如Sleep
顺便提醒一下,win9x中的缺省定时器间隔约50ms。
panxi 2000-06-29
  • 打赏
  • 举报
回复
这很简单,我的程序里是这么用的:

UINT IDOfTimer=::SetTimer(NULL,1,1000*2,TimerProc);
注意第一个参数为NULL

void CALLBACK TimerProc(
HWND hwnd,
UINT uMsg,
UINT idEvent,
DWORD dwTime )
{}

千万不要用循环,如果你使用循环,你马上就会耗尽CPU
结果就是死机
我的这段代码工作的很好,消耗的CPU极少
WHQ 2000-03-02
  • 打赏
  • 举报
回复
我写的那段代码不已处理了吗?你看一个WaitForSingleObject函数的说明就明白了
alanlee 2000-03-02
  • 打赏
  • 举报
回复
建议开启界面线程使其拥有自己的消息队列,在其中建立定时器并编写定时器调用代码,
然后发消息到你自己的主线程的消息队列中。
repus 2000-03-01
  • 打赏
  • 举报
回复
使用多媒体定时器timeSetEvent,它运行于自己的线程中,刚好符合你的后台定时器要求。
snakebird 2000-03-01
  • 打赏
  • 举报
回复
在循环中加一句:
Sleep(1);
就可以降低后台循环检测线程对CPU的占用率。
deepwater 2000-03-01
  • 打赏
  • 举报
回复
首先肯定不能用循环的方法,否则在95/98这种非真正独占式操作系统中会严重降低系统性能,我在去年一个 very time critical 的项目中碰到了精确到1毫秒的要求,我用的是
Multimedia Timers.
Multimedia Timers的详情可以从MSDN中查到,它是通过设定分辨率后,按你要求的时间定期调用你的回调函数,你只需先创建一个全局的事件,然后在你的回调函数每次被调用时signal此事件.同时在你的后台运行的Thread中WaitForSingleObject此事件即可.一旦WaitForSingleObject返回WAIT_OBJECT_0,则你等到时间了.记住在这儿把你的全局的事件unsignal再继续
cdzhd 2000-03-01
  • 打赏
  • 举报
回复
用用户线程代替工人线程
forgettor 2000-03-01
  • 打赏
  • 举报
回复
关注
vcfaq 2000-03-01
  • 打赏
  • 举报
回复
请问WHQ,后台进程要不断地等待每隔TimeOut 后所触发的消息,应怎样处理?
WHQ 2000-03-01
  • 打赏
  • 举报
回复
循环检测太耗CPU了,还是在检测的线程中等待一个永不发生的事件,并把超时设为你期望的时间比较好:

DWORD WINAPI DetectThreadProc(LPVOID lpParam)
{
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
DWORD dwTimeOut = 60000; // 你期望的时间间隔
DWORD dwDelay = 0;
while( !bFinish )
{
DWORD dwLoopStart = GetTickCount();
WaitForSingleObject(hEvent, dwTimeOut-dwDelay);
...
dwDelay = GetTickCount()-dwLoopStart; // 补偿检测处理所花的时间
}
}
vcfaq 2000-03-01
  • 打赏
  • 举报
回复
GetTickCount()放在 OnIdle消息下吗?
snakebird 2000-03-01
  • 打赏
  • 举报
回复
用CreateThread建立一个线程
在线程中用GetTickCount自己做循环计时,这样比用定时器好。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧