繁体   English   中英

boost :: thread异步中断

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM