【发布时间】:2011-06-18 20:12:33
【问题描述】:
我需要每 10 秒在我的程序中执行一次操作,但我不知道如何在 C++ 控制台应用程序中执行此操作。在 C# 中,我可以创建一个计时器,但我现在在这里挣扎......
睡眠();不是一个选项,因为据我所知,它会使您的程序在 X 秒内处于非活动状态,我需要我的应用程序处于活动状态并且可以正常工作,并且一直在计算。
请帮我解决这个小(或大?)问题,我对 C++ 和学习 ATM 很陌生:)
所以我已经设置了 BOOST 库,现在我正在做这样的事情。
boost::timer t;
while (true)
{
if (t.elapsed() > 1)
{
cout << t.elapsed() << endl;
t.restart();
}
}
它足够好还是应该有更好的方法?哦不,这很糟糕,不停地吃掉我 25% 的 CPU。 :(
【问题讨论】:
-
sleep() 是一个选项,如果你把它放在一个单独的线程中。
-
这 10 秒必须有多精确?由于您的应用程序“一直在计算”,您可能只需在其中一个外部循环中抛出一个 if 语句,检查当前时间,如果它在预定时间之后,则调用周期性工作函数并调整预定时间下次它应该运行。
-
PigBen 和 Ben 都说过,需要多精确?如果您只在一个线程中,您可能可以在那里进行某种睡眠(10ms 可能会这样做)。在 Windows 中它看起来像
Sleep(10);或在 *nix 中它看起来像usleep(10*1000); // 10microseconds * 1000 = 10 milliseconds
标签: c++