cpp-ipc icon indicating copy to clipboard operation
cpp-ipc copied to clipboard

ipc::channel 在调试模式,打断点,容易会出现,收不到消息的情况,且数据比较大的会出现连接断开的现象;

Open w08 opened this issue 2 years ago • 5 comments

无法拿到数据,不好排查;

w08 avatar Nov 02 '23 07:11 w08

接收方,一直在这里 typename queue_t::value_t msg {}; if (!wait_for(inf->rd_waiter_, [que, &msg] { return !que->pop(msg); }, tm)) { // pop failed, just return. return {};------------这里 } 内存如图: 2023 11 02_ f5eb43c848436bb429f242d024a94f91

此时 如果有新的发送方 也不予理会了,收不到数据,建立不了连接。

w08 avatar Nov 02 '23 07:11 w08

原因是因为打断点了吗?看起来好像是因为断点导致的超时。周末有空我看看。

mutouyun avatar Nov 06 '23 08:11 mutouyun

是断点导致的,同理 如果 执行太久 数据太多,线程阻塞 应该都会引起这个问题;

w08 avatar Nov 06 '23 13:11 w08

原因是因为打断点了吗?看起来好像是因为断点导致的超时。周末有空我看看。

感谢老大

w08 avatar Nov 08 '23 08:11 w08

我查了下,posix里只有pthread_cond_timedwait可以用CLOCK_MONOTONICpthread_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
};

mutouyun avatar Nov 12 '23 07:11 mutouyun