我認爲調用timed_receive()會在這種情況下超時,但它會卡住試圖鎖定互斥鎖。boost :: interprocess :: timed_receive()永遠不會返回,如果發送進程暫停
那麼在嘗試接收數據之前,我可以調用一個函數來告訴我發送過程是否已經死亡或被暫停?
我認爲調用timed_receive()會在這種情況下超時,但它會卡住試圖鎖定互斥鎖。boost :: interprocess :: timed_receive()永遠不會返回,如果發送進程暫停
那麼在嘗試接收數據之前,我可以調用一個函數來告訴我發送過程是否已經死亡或被暫停?
有沒有通用的方法來知道對方,死亡,暫停,部分鎖定(例如其中一個線程處於無限循環),玩負鼠,或只是敵對。如果反對方是合作的,你可以與心跳交流,並依靠他們來決定它是否有反應。
事實上,你的程序是「卡住」試圖鎖定一個互斥體(你確定是這樣的話?)可以表明,
的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。
此外請確保您通過絕對值超時值。
好的,這可能只是我的誤解。我在調試器中暫停了發送器以測試超時。我預計接收機會超時退出。但我認爲卡在共享互斥體中實際上是有道理的:發送者仍然活着,但沒有響應。如果我殺死發件人,超時確實發生如預期的那樣。 –
@ DavidM.Cotter很高興聽到! – mockinterface