2015-05-29 41 views
-1

在我的應用程序中,我給了10秒的睡眠時間。我已經使用boost :: this_thread :: sleep函數進行睡眠。 是否有任何可能的方法來中斷boost :: this_thread :: sleep函數。如何在C++中中斷boost :: this_thread

+0

@WouterHuysentruit,你應該回答好笑嗎? – Nidhoegger

回答

1

sleep() reference

拋出: boost::thread_interrupted如果當前執行線程被中斷。

注: sleep()是預定義interruption points之一。

因此,你需要在你的線程做的是把sleep()中的呼叫try-catch,並趕上boost::thread_interrupted。然後在線程對象上調用interrupt()來中斷睡眠。


順便說一句,也從sleep reference:自從3.0.0

警告

已過時。而不是使用sleep_for()sleep_until()

+0

hey @Joachim Pileborg我使用來自「boost :: this_thread」的睡眠函數,它沒有中斷API,我的要求是使用「boost :: this_thread」,所以有什麼方法來中斷睡眠。 – Mukul

+0

@ user3721279'boost :: this_thread :: sleep'是,正如我在我的答案中的鏈接引用的一個*中斷*點。請閱讀我答案中提供的鏈接。 –

0

我已經使用boost :: this_thread :: sleep函數給出了睡眠。有沒有什麼可能的方法來中斷boost :: this_thread :: sleep函數。?

不這樣,但不難實現它,在boost::this_thread::sleep術語:

void sleep_for(boost::posix_time::milliseconds interval, std::atomic<bool>& interrupted) 
{ 
    static const auto resolution = boost::posix_time::milliseconds(10)); 
    ptime end_time(microsec_clock::local_time()) + interval; 

    while(!interrupted.load()) 
    { 
     boost::this_thread::sleep(resolution); 
     if(microsec_clock::local_time() > end_time) 
      break; 
    } 
} 

客戶機代碼的線程1:

std::atomic<bool>& interrupt = false; 

void f() { 
    sleep_for(boost::posix_time::milliseconds(200), interrupt); 
} 

客戶機代碼的線程2:

interrupt.store(true); /// will cause thread 1 to be interrupted, if called 
         /// during execution of sleep_for. 
相關問題