我正在寻找一个适用于Windows的非阻塞睡眠计时器。
目前我正在使用sleep(10);
,这当然是一个阻止计时器。
此外,我希望它不消耗任何系统资源,例如我的睡眠定时器,它不使用我满意的任何CPU或系统资源。
那么,我可以使用的最佳非阻塞睡眠定时器是什么?还请提供一个如何使用它的示例。
感谢。
答案 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上,您有以下选项:
SetTimer - 用于GUI应用程序。分辨率约为15毫秒 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644906(v=vs.85).aspx
WaitableTimer - 适用于非GUI应用程序。您可以等待到期
这个计时器使用WaitFor ....可以运行一些函数或计时器
回调函数。分辨率约为15毫秒。
http://msdn.microsoft.com/en-us/library/ms687008(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx
计时器队列 - 如果需要处理许多计时器,请使用此技术。我认为这个计时器可能比15毫秒更准确。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms687003(v=vs.85).aspx
多媒体定时器 - 最精确的定时器,分辨率为1 ms。不幸的是,这些计时器有限。我认为16是最大数量。 http://msdn.microsoft.com/en-us/library/windows/desktop/dd757664(v=vs.85).aspx
您还应该记住,计时器回调函数将在您的应用程序的不同线程下运行。因此,如果回调函数使用与主线程相同的数据,则需要保护它们(使用Mutex,CriticalSection等)以消除多个线程的同时访问。
答案 4 :(得分:0)