2009-12-29 126 views
12

我目前正在爲提升線程小包裝類,但我不真正得到睡眠功能是如何工作的,這是我這麼遠:boost :: thread sleep()是做什麼的?

BaseThread::BaseThread(){ 
    thread = boost::thread(); 
    bIsActive = true; 
} 

BaseThread::~BaseThread(){ 
    join(); 
} 

void BaseThread::join(){ 
    thread.join(); 
} 

void BaseThread::sleep(uint32 _msecs){ 
    if(bIsActive) 
     boost::this_thread::sleep(boost::posix_time::milliseconds(_msecs)); 
} 

這是我是如何實現這麼遠,但我真的不明白如何靜態this_thread ::睡眠方法知道哪些線程睡覺,例如我的線程包裝的多個實例處於活動狀態。這是實施它的正確方法嗎?

回答

17

boost::this_thread::sleep將睡眠當前線程。只有線程本身才能進入睡眠狀態。如果您想讓線程休眠,請在線程中添加一些檢查代碼或use interruptions

更新:如果您使用最新的標準庫的C++ 11編譯器,您將有權訪問std::this_thread::sleep_forstd::this_thread::sleep_until函數。但是,沒有標準的中斷機制。

+0

檢查代碼像什麼?中斷似乎也是一個好方法。 – user240137 2009-12-29 11:53:20

+0

我的意思是「檢查代碼」是在由給定線程執行的代碼中,某處存在一個'if'來檢查是否需要睡覺並在必要時進行。例如,如果你的線程運行一個帶有大循環的函數,那麼在循環迭代的每一端檢查它是否需要休眠(通過檢查當前代碼設置的布爾值)就足夠了。但在你的情況下,你不想侵入你的線程代碼,所以中斷似乎是一個更好的選擇。 – Klaim 2009-12-29 13:16:07

2

睡眠總是影響當前線程(調用方法的線程)。

相關問題