2

我正在使用 Visual Studio 2012 和 C++,我需要每 5 分钟调用一次函数,我已经设法做到了,但它消耗了我 25% 的 CPU,这远非理想。

代码如下,

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 循环?

任何指导将不胜感激。

4

4 回答 4

2

Windows 有 Sleep(),对于每 300 秒发生一次的事情,这非常好。Windows 中也有计时器,它可能需要一个 timerproc 参数,它是一个函数 - 但请注意,这是一个 C 函数,而不是 C++,因此它不能是类成员函数,除非它是静态函数。

于 2012-12-23T21:19:10.623 回答
1

由于没有人建议,您可以在其中生成一个新std::threadSleep

于 2012-12-23T21:46:23.490 回答
0

你所做的就是忙着等待。您不断检查经过的时间,因此耗尽了 CPU 时间。

由于您使用的是 Windows,因此可能会对使用计时器队列感兴趣。

这将创建一个带有回调函数的计时器。您可以在等待计时器到期的同时做其他工作。

于 2012-12-23T21:42:39.177 回答
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

于 2012-12-23T22:08:03.650 回答