我正在寻找一个良好的非阻塞睡眠计时器在C为Windows。
目前我正在使用sleep(10);
这当然是一个阻塞计时器。
另外我希望它不消耗系统资源,就像我的睡眠计时器一样,它不使用任何我感到满意的CPU或系统资源。
那么,我可以使用的最好的非阻塞睡眠定时器是什么? 还请包括一个如何使用它的例子。
谢谢。
你不需要一个API来改变你的设计。
一个简单的是这个。
你可以有多个线程,一个是经理线程,另外一个是工作线程。 管理器线程每10秒钟会唤醒一次,创建一个新的工作线程并进入休眠状态。 工作者线程将继续工作,即使在经理睡觉,这是你有你的非阻塞效应。
我不知道你是多么亲近线程,但这是一个非常非常基本的教程 ,可能会让你开始这个。
Win32 API有SetTimer() 。 有从该页面链接的代码示例 。
根据OP最近对问题的评论,听起来好像目标是允许程序继续处理,但能够每10秒调用一些函数。 提供这种功能的一种方法是创建一个单独的线程,其职责是每10秒执行一次函数。 它可以使用Sleep( 10000 )
来阻止自己,然后调用函数,然后睡觉等。
主线程在这种情况下不会被阻塞,并且可以继续工作。
在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毫秒分辨率。 不幸的是这些定时器是有限制的。 我觉得16是最大的数字。 http://msdn.microsoft.com/en-us/library/windows/desktop/dd757664(v=vs.85).aspx
您还应该记住,定时器回调函数将在您的应用程序的不同线程下运行。 所以如果回调函数使用相同的数据作为你的主线程,那么你需要保护它们(使用Mutex,CriticalSection等)来消除多线程的同时访问。
在这个问题的解决方案,回答你的?
定时器来实现超时功能
问候,托尼。