[英]boost::thread interrupt asynchronously
我想在开关中使用线程。 这是可能的还是有其他方法来中断程序中其他地方的线程?
switch (event_element) // dispatch event handler
{
case 1: // main task thread
{
boost::thread thr_check_db_task (check_db_task);
break;
}
case 2:
{
std::cerr << "DATABASE CONNECTION ERROR" << std::endl;
thr_check_db_task.interrupt (); // **COMPILE ERROR**
mysql_connection_error ();
break;
}
default:
break;
}
谢谢。
您需要做的是将此线程对象作为根据类的成员变量,以便可以在此类的函数调用之间共享它。
例如,
#include <boost/thread/thread.hpp>
class tMyApp
{
struct callable
{
void operator()()
{
// Do something and wait to be interrupted
while (true)
{
/* .. */
}
}
};
public:
tMyApp(): m_thread(m_threadProc)
{
/* do something.. */
m_thread.interrupt();
}
private:
callable m_threadProc;
// The thread object
boost::thread m_thread;
};
由于这个问题 ,我弄清楚了。
boost::thread thr_check_db_task;
switch (event_element) // dispatch event handler
{
case 1: // main task thread
{
thr_check_db_task = boost::thread (check_db_task);
break;
}
case 2:
{
std::cerr << "DATABASE CONNECTION ERROR" << std::endl;
thr_check_db_task.interrupt ();
mysql_connection_error ();
break;
}
default:
break;
}
我知道答案比创建复杂的类要简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.