用线程同步函数超时机制做计时器

来源:互联网 发布:新网互联域名代理登录 编辑:程序博客网 时间:2024/06/07 11:12

最近项目中看到代码中有很奇怪的写法,线程循环用到windows线程同步方法的事件。但是这个事件不是用来做同步,用来当计时器使用,如下:
thread function:
while(m_hEvent && WaitForSingleObject(m_hEvent, nTimeout) != WAIT_OBJECT_0)
{
do somthing;
};
while中表达式一直为TRUE,这样每隔nTimeout时间就可以定时干些事情,比如心跳。同样的功能,用标志位+sleep函数不也可以实现么,而且系统开销小。想了半天后突然发现,这样写的话在程序结束时,SetEvent(m_hEvent)后,这个循环可以立即结束。但是用sleep,如果正好走到sleep,那么程序就得阻塞nTimeout长的时间。用事件方式的话可以及时的退出循环,而不引起阻塞。很精妙的写法。

原创粉丝点击