我开发了一个简单的轮询线程(使用Boost 1.39.0),它检查数据资源是否在给定时间范围内被访问,如果没有则清除连接。相关代码可以在下面查看。
我的担忧有两个:
1)在睡眠中使用中断是否适合安全地关闭线程?中断会等待睡眠完成还是会立即中断?您可以看到我捕获了一个 thread_interrupted 异常,只是为了逃避 while 循环。
2)使用大部分时间都在睡觉的线程是浪费吗?在标准 C++ 中实现简单的轮询机制是否有更好的模式?
boost::xtime xt;
while (1) {
try {
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += _sleep_secs;
boost::thread::sleep(xt);
//
// logic to check resource access
// etc.
}
catch(boost::thread_interrupted const&) {
return;
}
}