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_send
和mq_receive
。
根据mq_receive()
文档:
如果指定的消息队列为空,并且在与
mqdes
关联的消息队列描述中设置了O_NONBLOCK
,则不会从队列中删除任何消息,并且mq_receive()
将返回错误。
您可以使用mq_timedreceive函数。