如何在boost中找到当前正在运行的线程?

时间:2012-01-11 05:34:02

标签: c++ boost

我遇到的问题是代码段中的第(1),(2)和(3)行。

  1. 如何传递当前正在运行的线程的线程对象?
  2. 如何在不使用boost :: condition_variable的情况下执行上下文切换? (例如sleep(for ever)
  3. 如何重新运行该线程?
  4. 1   void wait()
    2   {
    3       if( some condition)
    4       {
    5           queue.enqueue( "current thread object" ); (1)
    6           boost::this_thread ( // context switch ) (2)
    7       }
    8   }
    9
    10  void signal()
    11  {
    12      boost::thread myThread = queue.dequeue();
    13      myThread.run(); (3)
    14  }
    

    1 void wait() 2 { 3 if( some condition) 4 { 5 queue.enqueue( "current thread object" ); (1) 6 boost::this_thread ( // context switch ) (2) 7 } 8 } 9 10 void signal() 11 { 12 boost::thread myThread = queue.dequeue(); 13 myThread.run(); (3) 14 }

1 个答案:

答案 0 :(得分:0)

虽然我不明白为什么你不只是使用boost::condition_variableboost::thread_pool(取决于你想做什么)。

有一些名为boost::context的内容正在进行审核,以便添加到boost中,我认为这样做可以满足您的需求。

有些事情:

void wait()
{
    if( some condition)
    {
        myContext->suspend(); // (2)
        queue.enqueue(std::move(myContext)); // (1)
    }
}

void signal()
{
      std::unique_ptr<boost::context> myContext = queue.dequeue();
      myContext->resume(); // (3)
}