阻止两个队列的呼叫?

时间:2014-02-13 17:17:24

标签: optimization resources queue vxworks blockingqueue

我有一个算法(VxWorks中的任务),它从多个队列中读取数据,以便能够相应地管理优先级。现在,msgQReceive( )函数可以设置为WAIT_FOREVER,这将使其成为阻塞调用,直到某些内容可用于接收和处理。现在,如果我有多个队列,我该怎么办呢?目前我检查一个while(1)循环,如果有任何队列有任何内容,如果有的话就收到它们但是如果没有,我的算法只是旋转,旋转和旋转并且没有任何东西吃CPU资源。我该如何防止这种情况发生?

2 个答案:

答案 0 :(得分:2)

您应该能够使用与Message Queue结合的VxWorks事件。 请参阅msgQEvStart函数和内核程序员指南,第7.9节。

这类似于使用select()进行I / O操作。 你做一个阻塞的eventReceive,它返回一个指示哪个队列有内容的位掩码,然后你做一个非阻塞的msgQReceive来检索数据。

或者您可以查看我刚才写的How can a task wait on multiple vxworks Queues?

答案 1 :(得分:0)

如前所述,您可以使用事件,或者如果您可以使用管道而不是msgQ,则可以使用select。

作为另一种选择,也许考虑拥有多个任务,每个任务服务一个msgQ