我认为在这种情况下调用timed_receive()只会超时,但是它会在尝试锁定互斥锁时卡住。
那么在尝试接收数据之前,我是否可以在我的阙上调用一个函数,该函数告诉我发送过程是否已经死亡或停止?
答案 0 :(得分: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”大小和优先级“priority”。如果消息队列是 清空接收器重试直到达到“abs_time”时间。返回 如果消息已成功发送,则为true。如果返回false 达到超时。错误时抛出interprocess_error。
还要确保传递绝对超时值。