C中的非阻塞睡眠定时器

时间:2011-10-14 17:10:07

标签: c windows winapi timer

我正在寻找一个适用于Windows的非阻塞睡眠计时器。

目前我正在使用sleep(10);,这当然是一个阻止计时器。

此外,我希望它不消耗任何系统资源,例如我的睡眠定时器,它不使用我满意的任何CPU或系统资源。

那么,我可以使用的最佳非阻塞睡眠定时器是什么?还请提供一个如何使用它的示例。

感谢。

5 个答案:

答案 0 :(得分:4)

您不需要更改设计所需的API。

一个简单的就是这个。

您可以拥有多个线程,一个是Manager线程,另一个是工作线程。 每隔10秒,管理器线程将唤醒,创建一个新的工作线程并进入休眠状态。 即使在Manager处于休眠状态时,工作线程也会继续工作,并且您具有非阻塞效果。

我不知道你对线程的熟悉程度,但这里有一个非常基本的tutorial,可能会让你开始使用它。

答案 1 :(得分:0)

Win32 API有SetTimer()。该页面链接了code examples

答案 2 :(得分:0)

根据OP最近对问题的评论,听起来似乎目标是允许程序继续处理但能够每10秒调用一些函数。提供此功能的一种方法是create a separate thread,其职责是每10秒执行一些功能。它可以使用Sleep( 10000 )来阻止自己,然后调用函数,然后休眠等等。

在这种情况下,主线程不会被阻止,并且可以继续进行其工作。

答案 3 :(得分:0)

在Windows上,您有以下选项:

您还应该记住,计时器回调函数将在您的应用程序的不同线程下运行。因此,如果回调函数使用与主线程相同的数据,则需要保护它们(使用Mutex,CriticalSection等)以消除多个线程的同时访问。

答案 4 :(得分:0)

这个问题的解决方案是否可以回答你的问题?

Timer to implement a time-out function

此致 二加元硬币。