【发布时间】:2014-02-15 02:01:36
【问题描述】:
我认为在这种情况下调用 timed_receive() 只会超时,但它却在尝试锁定互斥锁时卡住了。
那么在我尝试接收数据之前,我可以在我的队列上调用一个函数,它告诉我发送进程是否已经终止或停止?
【问题讨论】:
标签: c++ winapi boost boost-interprocess
我认为在这种情况下调用 timed_receive() 只会超时,但它却在尝试锁定互斥锁时卡住了。
那么在我尝试接收数据之前,我可以在我的队列上调用一个函数,它告诉我发送进程是否已经终止或停止?
【问题讨论】:
标签: c++ winapi boost boost-interprocess
没有通用的方法可以知道对方是死亡、停止、部分锁定(例如,其中一个线程处于无限循环中)、玩负鼠,还是只是在对抗。如果对方是合作的,你可以与心跳通信并依靠它们来决定它是否响应。
您的程序在尝试锁定互斥锁时“卡住”(您确定是这种情况吗?)这一事实可以表明,
timed_receive 成功、超时或按预期抛出:
bool timed_receive(void * buffer, std::size_t buffer_size, std::size_t & recvd_size,无符号整数 & 优先级, 常量提升::posix_time::ptime & abs_time);从消息队列接收消息。消息存储在 缓冲区“buffer”,其大小为“buffer_size”。收到的消息 具有大小“recvd_size”和优先级“优先级”。如果消息队列是 清空接收器重试,直到达到时间“abs_time”。退货 如果消息已成功发送,则为 true。如果返回 false 超时。出错时抛出 interprocess_error。
还要确保传递一个绝对超时值。
【讨论】: