在 Contiki 中编写多个进程时,通常会轮询一个进程并等待其退出或继续信号。但是,如果我需要等待特定进程结束并且我有多个进程触发的事件,我如何才能到达创建该事件的源进程?例如,在下面的代码中,我想知道哪个进程刚刚退出,以便 P3 可以继续前进。
这是一个常见的情况:
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)
为假。但是ev
,在 Process 句柄中添加少量内容的比较方法会更加优雅和可读。
我无法从 Contiki 源代码中得到任何提示。有没有人尝试过像我上面暗示的那样的替代方案?