Events Contiki事件源

Events Contiki事件源,events,contiki,protothread,Events,Contiki,Protothread,在Contiki中写入多个进程时,通常轮询一个进程并等待其退出或继续信号。但是,如果我需要等待某个特定进程结束,并且有多个进程触发了事件,那么如何才能到达创建该事件的源进程?例如,在下面的代码中,我想知道哪个进程刚刚退出,以便P3可以继续 以下是一个常见的情况: PROCESS_THREAD(&P1,ev,data){ PROCESS_BEGIN(); //Do Something PROCESS_END();//Posts an EXITED event

在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();
}
还有其他方法,我可以在循环时执行
,直到
进程运行(&P1)
进程运行(&P2)
都为false。但是
ev
比较方法只需在流程句柄中添加一小部分,就会更加优雅和可读


我无法从Contiki源代码中得到任何提示。有没有人尝试过像我上面暗示的那样的替代方法?

我相信
data
参数是指向已退出进程的指针。因此,这应该是可行的:

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

我相信
data
参数是指向已退出的进程的指针。因此,这应该是可行的:

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

我又想出了一个办法。Contiki有一个信号量库,可用于在某个互斥进程上等待信号。是链接

这个想法基本上是在P3开始时启动一个信号量,让P3等待它被释放。我只能在P2中释放,而不能在P1中释放


我将在测试解决方案后发布代码

我又想出了一个办法。Contiki有一个信号量库,可用于在某个互斥进程上等待信号。是链接

这个想法基本上是在P3开始时启动一个信号量,让P3等待它被释放。我只能在P2中释放,而不能在P1中释放

我将在测试解决方案后发布代码