POSIX消息队列接收超时

时间:2018-07-18 08:54:36

标签: c queue posix

DB::table('pickups')
->select(['worker_id ','date',DB::raw('sum(box_weight)'),DB::raw('sum(bag_weight)')])
->groupBy('worker_id','date')
->get();

如果没有收到消息,如何从mq_receive退出。是否有可能超时?谢谢您的时间。

2 个答案:

答案 0 :(得分:2)

您可以使用mq_timedreceive函数。

答案 1 :(得分:2)

除了mq_timedreceive()外,当您使用O_NONBLOCK打开队列时,还可以设置mq_open()。根据{{​​3}}:

  

O_NONBLOCK       确定mq_send()mq_receive()是等待当前不可用的资源或消息,还是将errno设置为EAGAIN而失败;有关详细信息,请参见mq_sendmq_receive

the mq_open() documentation

  

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