2014-02-13 3 views
0

나는 우선 순위를 적절하게 관리 할 수 ​​있도록 여러 대기열에서 데이터를 읽는 알고리즘 (VxWorks의 작업)을 가지고 있습니다. 이제 msgQReceive() 함수는 WAIT_FOREVER으로 설정되어 수신 및 처리가 가능해질 때까지 차단 호출이됩니다. 이제 다중 대기열이있는 경우 어떻게해야합니까? 현재 어떤 큐가 어떤 내용을 가지고 있고 그것들을 받았다면 아무런 문제가 없다면 while(1) 루프를 체크한다. 내 알고리즘은 단지 회전하고 아무것도하지 않고 CPU 리소스를 회전시키고 먹는다. 이 최선을 어떻게 방지 할 수 있습니까?두 대기열에서 통화가 차단 되나요?

답변

2

메시지 큐와 결합 된 VxWorks 이벤트를 사용할 수 있어야합니다. msgQEvStart 함수 및 커널 프로그래머 지침서, 7.9 절을 참조하십시오.

I/O 작업에 select()를 사용하는 것과 비슷합니다. 어떤 큐가 내용을 가지고 있는지를 나타내는 비트 마스크를 반환하는 블로킹 eventReceive를 수행 한 다음 비 블로킹 msgQReceive를 수행하여 데이터를 검색합니다.

아니면 내가 얼마 전에 쓴 How can a task wait on multiple vxworks Queues? 볼 수 있습니다,

이미, 당신은 당신이 대신 MSGQ의 파이프를 사용할 수있는 다른 방법 경우, 이벤트를 사용할 수 있습니다 언급
0

, 당신은 잠재적으로 선택 사용할 수 있습니다.

또 다른 대안으로, 각각 하나의 msgQ

을 처리하는 여러 작업을 고려하는 것이 좋습니다.