将 cppzmq message_t 移动到后台线程

问题描述 投票:0回答:1

我有一个接收器线程。我想将消息移动到后台处理器线程的队列中。简单来说:

std::queue<zmq::message_t> qu;
zmq::message_t msg;
zmq::recv_result_t res = sock.recv(msg, zmq::recv_flags::none);
qu.push(std::move(message));

我收到错误:

include/zmq.hpp:745:5: note: declared here
  745 |     message_t(const message_t &) ZMQ_DELETED_FUNCTION;

即使没有

std::move
,它仍然无法工作。

我明白

zmq::message_t
不应该这样移动。正确的做法是什么(高效,无需不必要的复制)?

我希望

message_t
将保存在堆上分配的消息数据,并将在
message_t
的析构函数中释放。那么,我不明白这里的问题是什么。

c++ zeromq czmq
1个回答
0
投票

你可以使用

qu.emplace(std::move(message))

相反,或者显式调用

move()
:

qu.push(message_t{});
message.move(qu.back());
© www.soinside.com 2019 - 2024. All rights reserved.