关于线程和定时器 请问如果需要定时循环执行某操作,是在线程的while循环中用sleep好,还是在主界面线程里面用ontimer循环执行好?也请指教一下,在线程中一般使用什么方法进行定时比较好? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可能我说的不清楚,我指的操作是一定要写在一个新线程里的,现在的问题是要定时循环执行,到底是在主界面线程里用ONTIMER循环启动线程好呢,还是在线程里进行定时好呢?如果在线程里进行定时,我目前知道的方法是在while循环里用sleep,请问还有什么更好的方法?在线程里能不能用ontimer? 用wm_timer吧,简单点又可以实现你的要求。 在线程里面好,不过不用Sleep,因为程序运行需要时间,所以不精确,应该用以下方法,可精确到1毫秒//以下是100毫秒一次的精确定时timeBeginPeriod(1); const DWORD dwFrameRate = 10; static DWORD dwFrameNum = 0; DWORD dwFramePeriod = 1000 / dwFrameRate; DWORD dwStartTime = timeGetTime(); for ( ;; ) { DWORD dwTimeThisFrame = dwStartTime + ((++dwFrameNum * 1000) / dwFrameRate); long lWaitTime = dwTimeThisFrame - timeGetTime(); if (lWaitTime < 0) { continue; } DWORD rc = WaitForSingleObject(m_hQuitEvent, (DWORD)lWaitTime); if (rc == WAIT_OBJECT_0) { break; } //具体的处理代码 } timeEndPeriod(1); 谢谢。如果在主线程中用wm_timer循环启动子线程,只能适用于线程只有一个定时操作的情况,如果那个子线程中有两个需要定时执行的操作,如何解决呢? 如果非要在线程中进行定时,用什么方法好? 回broadoceans(broadoceans):谢谢你的指教!你的代码收下了!我目前的情况并不是需要很精确(定时大概10秒以上,秒级就够了),我只是关系资源占用问题和程序长时间运行后的定时是否仍然能达到要求(误差不会因为运行时间的延长而增大) 主线程中用wm_timer循环启动子线程,那你不能开两个同样优先级的线程,分别处理两个需要定时执行的操作,保持两个线程同步不行吗?? 如果不需要精确定时,用Sleep最好了 主线程中用wm_timer循环启动子线程,那你不能开两个同样优先级的线程,分别处理两个需要定时执行的操作,保持两个线程同步不行吗??-------------------------除非是UI线程,工作者线程不能启动定时器。因为没有主窗口! ADO MFC添加和修改的疑惑 (源码)模仿360安全卫士新版特性源码 100分求解 调用CoCreateInstance返回错误, 在线等~~ vc模块组合 我在CDMA无线上网的机器上,建立一个UDP服务程序,为什么收不到数据包???? ADO连sqlserver问题 大家能否谈一下VC++的消息机制?什么SendMessage呀ON_BN_CLICKED呀搞的俺一头雾水。 请问如何做一个简单的编辑工具 在线等待,小问题! 大家看看这段代码能在2000下编译么??谢谢 菜鸟问题:怎样从accesss数据库中调入数据参加运算??急!! 关于结构体另外一个问题,急急
//以下是100毫秒一次的精确定时timeBeginPeriod(1);
const DWORD dwFrameRate = 10;
static DWORD dwFrameNum = 0;
DWORD dwFramePeriod = 1000 / dwFrameRate;
DWORD dwStartTime = timeGetTime();
for ( ;; ) {
DWORD dwTimeThisFrame = dwStartTime + ((++dwFrameNum * 1000) / dwFrameRate);
long lWaitTime = dwTimeThisFrame - timeGetTime();
if (lWaitTime < 0) {
continue;
}
DWORD rc = WaitForSingleObject(m_hQuitEvent, (DWORD)lWaitTime);
if (rc == WAIT_OBJECT_0)
{
break;
}
//具体的处理代码
}
timeEndPeriod(1);
谢谢你的指教!你的代码收下了!我目前的情况并不是需要很精确(定时大概10秒以上,秒级就够了),我只是关系资源占用问题和程序长时间运行后的定时是否仍然能达到要求(误差不会因为运行时间的延长而增大)
-------------------------
除非是UI线程,工作者线程不能启动定时器。因为没有主窗口!