2017-04-13 34 views
1

在Contiki中寫入多個進程時,通常輪詢進程並等待其退出或繼續信號。但是,如果我需要等待特定流程結束並且有多個流程觸發事件,那麼我如何才能到達創建該事件的源流程?例如,在下面的代碼中,我想知道哪個進程剛剛退出,以便P3可以繼續前進。Contiki事件源

這是一個常見的情況:

PROCESS_THREAD(&P1,ev,data){ 
    PROCESS_BEGIN(); 
    //Do Something 
    PROCESS_END();//Posts an EXITED event 
} 

PROCESS_THREAD(&P2,ev,data){ 
    PROCESS_BEGIN(); 
    //Do Something 
    PROCESS_END();//Also posts an EXITED event 
} 

PROCESS_THREAD(&P3,ev,data){ 
    PROCESS_BEGIN(); 
    if(ev==PROCESS_EXITED_EVENT){ 
    //Do Something only upon the exit of PROCESS 2 
    //However this if block works at the exit of either P1 or P2 
    } 
    PROCESS_END(); 
} 

還有其他的方法,我可以做一個while循環直到兩個process_is_running(&P1)process_is_running(&P2)都是假的。但是對於Process進程的一個小增加的比較方法將更加優雅和可讀。

我無法從Contiki源代碼中得到任何提示。有沒有人嘗試過像我上面暗示的那種替代方案?

回答

0

我相信data參數是一個指向已退出進程的指針。所以這應該工作:

if(ev == PROCESS_EXITED_EVENT && data == &P2) { 
    printf("process 2 exited\n"); 
} 
0

我想出了一個更多的方法。 Contiki有一個信號庫,可以用來等待某個互斥進程的信號。 Here是鏈接。

這個想法基本上是在P3開始時啓動一個信號燈,讓P3等待它被釋放。我只能在P2中釋放它,而不能在P1中釋放它。

我在測試出解決方案後發佈代碼。