2012-01-11 78 views
0

我遇到的問題是在代碼段中的行(1),(2)和(3)。如何在boost中找到當前正在運行的線程?

  1. 如何傳遞當前正在運行的線程的線程對象?
  2. 如何在不使用boost :: condition_variable的情況下執行上下文切換? (例如:sleep(for ever)
  3. 如何重新運行線程?

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 } 

回答

0

雖然我不明白爲什麼你不只是使用boost::condition_variableboost::thread_pool(取決於你想要做什麼)。

有一種叫做boost::context的東西正在審查中,以便加入進來,我認爲這是你想要的。

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) 
} 
:沿線的

東西

相關問題