ipc::channel 在调试模式,打断点,容易会出现,收不到消息的情况,且数据比较大的会出现连接断开的现象;
无法拿到数据,不好排查;
接收方,一直在这里
typename queue_t::value_t msg {};
if (!wait_for(inf->rd_waiter_, [que, &msg] {
return !que->pop(msg);
}, tm)) {
// pop failed, just return.
return {};------------这里
}
内存如图:
此时 如果有新的发送方 也不予理会了,收不到数据,建立不了连接。
原因是因为打断点了吗?看起来好像是因为断点导致的超时。周末有空我看看。
是断点导致的,同理 如果 执行太久 数据太多,线程阻塞 应该都会引起这个问题;
原因是因为打断点了吗?看起来好像是因为断点导致的超时。周末有空我看看。
感谢老大
我查了下,posix里只有pthread_cond_timedwait可以用CLOCK_MONOTONIC,pthread_mutex_timedlock就不行了;win上WaitForSingleObject也有同样的问题,想解决似乎很麻烦(https://github.com/microsoft/STL/issues/718)。
一个简单的做法是在调试的时候把def.h里的默认超时改成-1:
enum : std::uint32_t {
invalid_value = (std::numeric_limits<std::uint32_t>::max)(),
default_timeout = 100, // ms
};