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