您的位置:首页 > 其它

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

2017-07-05 22:25 190 查看
最近项目中看到代码中有很奇怪的写法,线程循环用到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长的时间。用事件方式的话可以及时的退出循环,而不引起阻塞。很精妙的写法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程 同步 循环 阻塞