gpt4 book ai didi

c - 如何实现zmsg_recv_nowait?

转载 作者:行者123 更新时间:2023-11-30 14:21:13 24 4
gpt4 key购买 nike

CZMQ 库为 zstrzframe 类提供 nowait 选项(zstr_recv_nowait()zframe_recv_nowait ()),但没有像 zmsg_recv_nowait() 这样的东西。有什么解决办法吗?而不是使用带有 ZMQ_DONTWAIT 标志的 zmq_msg_recv 。我的代码是:

zmq_pollitem_t items[] = { {sock, 0, ZMQ_POLLIN, 0} };
zmq_poll(items, 1, 10);
/* now receive all pending messages */
while (1) {
zmsg_t *msg = zmsg_recv(sock); /* this will block after the last message received */
/* consume message here */
}
/* sending bunch of messages */

我正在执行异步REQ/REP。发送多个请求,然后在准备好时接收回复。此代码将阻止我的应用程序。另外,对我来说,执行一个 zmq_poll、接收一条消息等等似乎很难看...因为当 zmq_poll 返回时,其他回复已经到达。

最佳答案

将轮询代码放入循环中。对一个套接字使用 poll 就可以了。

一个例子可能会有所帮助:

while (1) {
/* now receive all pending messages */
zmq_pollitem_t items[] = { {sock, 0, ZMQ_POLLIN, 0} };

/* this will block for 10msec, ZMQ_POLL_MSEC is for compatibility for v2.2 */
int rc = zmq_poll(items, 1, 10 * ZMQ_POLL_MSEC );
if (rc == -1)
break; // some error occured, check errno...

if (items [0].revents & ZMQ_POLLIN) {
/* there's something to receive */
zmsg_t *msg = zmsg_recv(sock);
}

/* sending bunch of messages */
}

关于c - 如何实现zmsg_recv_nowait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14870251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com