2014-02-15 30 views

回答

0

有沒有通用的方法來知道對方,死亡,暫停,部分鎖定(例如其中一個線程處於無限循環),玩負鼠,或只是敵對。如果反對方是合作的,你可以與心跳交流,並依靠他們來決定它是否有反應。

事實上,你的程序是「卡住」試圖鎖定一個互斥體(你確定是這樣的話?)可以表明,

  • 隊列爲空,且超時值不已過期
  • 您已遇到死鎖情況。

的timed_receive成功,超時,或拋出如預期:

 
bool timed_receive(void * buffer, std::size_t buffer_size, 
        std::size_t & recvd_size, unsigned int & priority, 
        const boost::posix_time::ptime & abs_time); 

從消息隊列中接收消息。該消息存儲在 緩衝區「緩衝區」中,緩衝區的大小爲「buffer_size」。接收到的消息 具有大小「recvd_size」和優先級「優先級」。如果消息隊列爲 ,則接收器重試,直到達到「abs_time」時間。返回 如果消息已成功發送,則爲true。如果達到 超時,則返回false。拋出錯誤時的interprocess_error。

此外請確保您通過絕對值超時值。

+0

好的,這可能只是我的誤解。我在調試器中暫停了發送器以測試超時。我預計接收機會超時退出。但我認爲卡在共享互斥體中實際上是有道理的:發送者仍然活着,但沒有響應。如果我殺死發件人,超時確實發生如預期的那樣。 –

+0

@ DavidM.Cotter很高興聽到! – mockinterface

相關問題