From a100bb2af8afc5fb61abc54e0b616cc44bb0b814 Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期五, 26 三月 2021 15:53:35 +0800 Subject: [PATCH] adjust mq length. --- src/shm_queue.h | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/shm_queue.h b/src/shm_queue.h index d0eb972..140654c 100644 --- a/src/shm_queue.h +++ b/src/shm_queue.h @@ -53,9 +53,11 @@ using Super::size; using Super::capacity; const MQId &Id() const { return id_; } - bool Write(D buf, const int timeout_ms) { + template <class OnWrite> + bool Write(const D &buf, const int timeout_ms, const OnWrite &onWrite) { Guard lock(mutex()); if (cond_write_.timed_wait(lock, MSFromNow(timeout_ms), [&]() { return !this->full(); })) { + onWrite(); this->push_back(buf); cond_read_.notify_one(); return true; @@ -63,11 +65,13 @@ return false; } } + bool Write(const D &buf, const int timeout_ms) { return Write(buf, timeout_ms, [](){}); } bool Read(D &buf, const int timeout_ms){ Guard lock(mutex()); if (cond_read_.timed_wait(lock, MSFromNow(timeout_ms), [&]() { return !this->empty(); })) { - buf = this->front(); + using std::swap; + swap(buf, this->front()); this->pop_front(); cond_write_.notify_one(); return true; @@ -84,13 +88,14 @@ bool Write(const Msg &buf, const int timeout_ms) { return data()->Write(buf, timeout_ms); } bool Read(Msg &buf, const int timeout_ms) { return data()->Read(buf, timeout_ms); } public: - ShmMsgQueue(const MQId &id, ShmType &segment, const uint32_t len); - ShmMsgQueue(ShmType &segment, const uint32_t len); + ShmMsgQueue(const MQId &id, ShmType &segment, const int len); + ShmMsgQueue(ShmType &segment, const int len); ~ShmMsgQueue(); bool Send(const MQId &remote_id, const void *data, const size_t size, const int timeout_ms); bool Recv(MQId &source_id, void *&data, size_t &size, const int timeout_ms); const MQId &Id() const { return data()->Id(); } bool Send(const MQId &remote_id, const Msg &msg, const int timeout_ms); + bool Recv(Msg &msg, const int timeout_ms) { return Read(msg, timeout_ms); } }; } // namespace bhome_shm -- Gitblit v1.8.0