上一次提到了ace中的主動物件,其實每乙個任務都有乙個訊息佇列,這個訊息佇列可用作任務間通訊的一種方式。當乙個任務想要與另乙個任務通訊時,他建立乙個訊息,
並將訊息放入它想通訊的任務的訊息佇列中。另乙個任務用getq()方法來獲得這個訊息。如果佇列中沒有訊息,任務就進入休眠狀態。
下面的例子演示如何進行任務間通訊,生產者產生資料並放到消費者的訊息佇列中,消費者從佇列中取出資料,並進行處理。
#include "ace/task.h"
#include "ace/message_block.h"
#include "ace/synch.h"
class consumer:public ace_task
int open(void*)
int close(u_long)
int svc(void)
while(*mb->rd_ptr()<10);
return 0;}};
class producer:public ace_task
int open(void*)
int svc(void)
return 0;
}int close(u_long)
private:
char _data;
consumer *_consumer;
ace_message_block *_mb;
};int main(int argc,char* argv)
任務間通訊
另請參閱 阻止多個rtos物件 佇列是任務間通訊的主要形式。它們可以用來在任務之間以及中斷和任務之間傳送訊息。在大多數情況下,它們被用作執行緒安全fifo 先入先出 緩衝區,新資料被傳送到佇列的後面,儘管資料也可以傳送到前端。寫入和讀取佇列。在這個例子中,佇列被建立為儲存5個專案,並且佇列永遠不會變...
VxWorks任務間通訊
1.共享記憶體 雙向鍊錶 環形緩衝 2.互斥 中斷鎖 作用域僅限於中斷內部。優先順序鎖 共享記憶體中,低優先順序的任務不允許被打斷,優先順序鎖就被使用。弊端 會完全禁止任務的排程。3.訊號量 一種指向semaphore結構的指標 sem eventsend err notify,釋放訊號量出錯返回錯...
rtx任務間通訊 互斥量
2013 11 06 luoqindong void os mut init os id mutex the mutex to initialize 初始化乙個互斥量,互斥量內部計數計為0,mutex型別必須為os mut.在呼叫互斥量相關函式之前,必須用該函式先初始化互斥量.os result o...