0

CZMQ ライブラリはandクラス (および) のnowaitオプションを提供しますが、 のようなものはありません。解決策はありますか?フラグを使用する代わりに。私のコードは次のとおりです。zstrzframezstr_recv_nowait()zframe_recv_nowait()zmsg_recv_nowait()zmq_msg_recvZMQ_DONTWAIT

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また、1つを実行して1つのメッセージを受信するなど、私には醜いように思えます...zmq_poll戻るまでに、他の返信が届いていたからです。

4

1 に答える 1

2

ポーリング コードをループに入れます。1 つのソケットに対して 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 */
}
于 2013-02-16T06:21:05.687 に答える