c-POSIX消息队列接收超时


if((nbytes=mq_receive (qid_recv, (pchar_t)in_buffer, msg_buffer_size, NULL)) != -1) {
printf("nbytes is %ldn", nbytes);
}else{
perror("recv_data");
printf("nbytes is %ldn", nbytes);

如果没有收到消息,如何退出mq_receive。有没有可能暂停一下。谢谢你抽出时间。

除了mq_timedreceive(),您还可以在使用mq_open()打开队列时设置O_NONBLOCK。根据mq_open()文件:

O_NONBLOCK确定mq_send()mq_receive()是等待当前不可用的资源或消息,还是在errno设置为EAGAIN时失败;详见mq_sendmq_receive

根据mq_receive()文档:

如果指定的消息队列为空,并且在与mqdes关联的消息队列描述中设置了O_NONBLOCK,则不会从队列中删除任何消息,并且mq_receive()将返回错误。

您可以使用mq_timedreceive函数。

相关内容

  • 没有找到相关文章

最新更新