首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Contiki事件源

Contiki事件源
EN

Stack Overflow用户
提问于 2017-04-13 15:04:12
回答 2查看 270关注 0票数 1

在Contiki中编写多个进程时,通常会轮询进程并等待其退出或继续信号。但是,如果我需要等待一个特定的进程结束,并且我有多个进程触发的事件,我如何才能找到创建该事件的源进程?例如,在下面的代码中,我想知道哪个进程刚刚退出,以便P3可以继续前进。

下面是一个常见的例子:

代码语言:javascript
复制
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)都为false。但是,在进程句柄中添加少量内容的ev比较方法将更加优雅和可读。

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

EN

回答 2

Stack Overflow用户

发布于 2017-04-13 17:55:43

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

代码语言:javascript
复制
if(ev == PROCESS_EXITED_EVENT && data == &P2) {
  printf("process 2 exited\n");
}
票数 0
EN

Stack Overflow用户

发布于 2017-04-13 20:52:00

我想出了另一种方法。Contiki有一个信号库,可以用来等待某个互斥进程上的信号。Here是链接。

这个想法基本上是在P3的开始启动一个信号量,让P3等待它的发布。我只能在P2中发布,不能在P1中发布。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43385623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档