From b815a5e50fb6cefb96f6211661d00fc983e21a3a Mon Sep 17 00:00:00 2001 From: mutouyun Date: Mon, 24 Dec 2018 12:11:50 +0800 Subject: [PATCH] channel::send will wait for a while & return false if there is no receiver --- src/channel.inc | 3 ++- test/test_ipc.cpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/channel.inc b/src/channel.inc index 264a688..a813ef4 100644 --- a/src/channel.inc +++ b/src/channel.inc @@ -134,7 +134,8 @@ std::size_t channel::recv_count() const { template inline bool channel_send(route& rt, P&&... params) { - while (rt.recv_count() == 0) { + for (int k = 0; rt.recv_count() == 0; ++k) { + if (k >= 1024) return false; std::this_thread::yield(); } return rt.send(params...); // no need std::forward diff --git a/test/test_ipc.cpp b/test/test_ipc.cpp index 9ac1f97..f4a69e3 100644 --- a/test/test_ipc.cpp +++ b/test/test_ipc.cpp @@ -425,7 +425,7 @@ void Unit::test_channel_rtt() { auto dd = cc.recv(); if (dd.size() < 2) return; // std::cout << "recving: " << i << "-[" << dd.size() << "]" << std::endl; - cc.send(ipc::buff_t { 'a' }); + while (!cc.send(ipc::buff_t { 'a' })) {} } }}; @@ -434,7 +434,7 @@ void Unit::test_channel_rtt() { sw.start(); for (std::size_t i = 0; i < LoopCount; ++i) { // std::cout << "sending: " << i << "-[" << datas__[i].size() << "]" << std::endl; - cc.send(datas__[i]); + while (!cc.send(datas__[i])) {} /*auto dd = */cc.recv(); // if (dd.size() != 1 || dd[0] != 'a') { // QVERIFY(false);