如何在线程中实现精度为1毫秒的延时,且不占用CPU

wanjinball 2005-09-24 07:04:14
需要在线程中实现一个延时,该延时需要精确到1毫秒,而且要像Sleep似的不占用CPU资源。如果使用获取CPU频率的办法,就会使得CPU占用率达到100%,肯定不能使用的。请各位大拿教我一种办法,谢谢了!
...全文
302 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bomdy 2006-03-30
  • 打赏
  • 举报
回复
可以用Multimedia Timer

timeBeginPeriod(1); //设精度为1ms
timeSetEvent(1, 1, TimeCallBack, (DWORD)m_hWnd, TIME_PERIODIC); //设置timer

在TimeCallBack中向窗口送WM_TIMER消息即可
一条晚起的虫 2006-03-30
  • 打赏
  • 举报
回复
要求太高,做不到
FengYuanMSFT 2006-03-30
  • 打赏
  • 举报
回复
There is no way to achieve accurate delay in Windows, because it's not a real time operating system.

Try use a dual core CPU.
nkwesley 2006-03-30
  • 打赏
  • 举报
回复
使用sleep函数的不利只处在于期间不能处理其他的消息,如果时间太长,就好象死机一样,利用ColeDateTime类和ColeDateTimeSpan类实现延时:
ColeDateTime start_time = ColeDateTime::GetCurrentTime();
ColeDateTimeSpan end_time = ColeDateTime::GetCurrentTime()-start_time;
While(end_time.GetTotalSeconds() <= 2)
{
MSG msg;
GetMessage(&msg,NULL,0,0);
PreTranslateMessage(&msg);
End_time = ColeDateTime::GetCurrentTime-start_time;
}
这样在延时的时候我们也能够处理其他的消息。
zhoujiamurong 2006-03-02
  • 打赏
  • 举报
回复
这个和sleep()一样,10毫秒还可以,1毫秒就误差太大
  • 打赏
  • 举报
回复
up
vcmute 2005-09-24
  • 打赏
  • 举报
回复
int main()
{
HANDLE hTimer = NULL;
LARGE_INTEGER liDueTime;

liDueTime.QuadPart=-100000000;

// Create a waitable timer.
hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");
if (!hTimer)
{
printf("CreateWaitableTimer failed (%d)\n", GetLastError());
return 1;
}

printf("Waiting for 10 seconds...\n");

// Set a timer to wait for 10 seconds.
if (!SetWaitableTimer(
hTimer, &liDueTime, 0, NULL, NULL, 0))
{
printf("SetWaitableTimer failed (%d)\n", GetLastError());
return 2;
}

// Wait for the timer.

if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
printf("WaitForSingleObject failed (%d)\n", GetLastError());
else printf("Timer was signaled.\n");

return 0;
}

例子是10秒,自己改改

16,472

社区成员

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

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

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