用线程同步函数超时机制做计时器
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长的时间。用事件方式的话可以及时的退出循环,而不引起阻塞。很精妙的写法。
thread function:
while(m_hEvent && WaitForSingleObject(m_hEvent, nTimeout) != WAIT_OBJECT_0)
{
do somthing;
};
while中表达式一直为TRUE,这样每隔nTimeout时间就可以定时干些事情,比如心跳。同样的功能,用标志位+sleep函数不也可以实现么,而且系统开销小。想了半天后突然发现,这样写的话在程序结束时,SetEvent(m_hEvent)后,这个循环可以立即结束。但是用sleep,如果正好走到sleep,那么程序就得阻塞nTimeout长的时间。用事件方式的话可以及时的退出循环,而不引起阻塞。很精妙的写法。
相关文章推荐
- Java并发框架——AQS超时机制
- golang 使用os/exec配合context实现的超时机制
- 使用druid连接池的超时回收机制排查连接泄露问题
- 深入理解JDBC及其超时机制
- vsftpd的超时与流控机制
- Android·HTTP超时机制
- haproxy 超时机制
- Linux C++ 实现时间轮 优化超时检测机制
- Netty的超时机制
- Android超时机制
- selenium 超时机制
- [Win32] Windows Sockets 2笔记(4)TCP Client端的实现(长数据接收+超时机制)
- 深入分析JDBC超时机制
- mysql的jdbc中sql语句超时机制bug导致的内存泄露处理
- ACE_Thread_Mutex和ACE_Process_Mutex超时等待机制
- Dubbo超时机制导致的雪崩连接
- UIKit基础:18-MVC模式, 代理消息传递机制, 计时器机制
- haproxy 超时机制
- HBase最佳实践-客户端超时机制
- Session、Session的跟踪机制、Session的超时管理、IE禁用Cookie后的session处理