我正在使用Visual Studio 2012和C ++,我需要每5分钟调用一次函数,我已经设法做到了,但它占用了我的CPU的25%,这远非理想。
代码如下,
time_t start;
time_t end;
time(&start);
while (1) {
time(&end);
double dif = difftime (end,start);
if (dif >= 300) { autofunction(); time(&start);} else {} }
是否有更高效的CPU方式每5分钟调用一次函数或以任何方式减慢我的while循环?
非常感谢任何指导。
答案 0 :(得分:2)
Windows有Sleep(),对于每300秒发生的事情,这非常好。 Windows中也有定时器,可能需要一个timerproc参数,这是一个函数 - 但请注意,这是一个C函数,而不是C ++,所以它不能是类成员函数,除非它是静态函数。
答案 1 :(得分:1)
由于没有人建议,您可以在其中生成新的std::thread
和Sleep
。
答案 2 :(得分:0)
你做的是busy waiting。您经常检查已经过去的时间,因此耗尽CPU时间。
由于你在Windows上,Using Timer Queues可能会引起人们的兴趣。
这会创建一个带回调函数的计时器。您可以在等待计时器到期时执行其他工作。
答案 3 :(得分:0)
我认为最好的答案取决于你正在做的更多细节。如果您只需要大约5分钟,也许您可以将持续时间计算放在一个程序更方便的位置,并且在检查后5分钟后第一次运行任务。
否则,看起来@BartekBanachewicz最好建议启动一个使用sleep
---的线程,而不会阻止你的主线程正在做你正在做的事情。只要你的主线程肯定会运行超过5分钟,总是在最后重新join()
线程或任何时候都应该是一个问题。
使用线程的好处是不需要任何特定于Windows的东西 - 例如@ OlafDietsche的建议,无论计时器队列是什么。使用c ++ 0x,线程非常易于使用,请参阅:http://en.cppreference.com/w/cpp/thread/thread; http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c++0x-part-1-starting-threads.html