protothread将一个线程跳转到外部main函数的开头

时间:2015-09-02 14:20:32

标签: protothread

我设置了一个protothread并阻止...

O(# of bits in stream)

过了一会儿,static int mythread(struct pt *pt){ static int k; PT_BEGIN(pt) while(1){ PT_WAIT_UNTIL(pt, eventA == 1); // blocked at lineA for(k=0;k<100;k++){ //do something PT_YIELD(pt); //blocked at lineB } PT_WAIT_UNTIL(pt, eventB == 1); //block at lineC } PT_END(pt) } 可以在&#34; lineA&#34;,&#34; lineB&#34;或&#34; lineC&#34;中被阻止。

外部功能如mythread重置main()如何在开始时阻止&#34; lineA&#34;试。

运行宏mythread?编译器不喜欢它。由于我的PT_RESTART(&pt_mythread)函数不在PT_BEGIN,PT_END块内,因此该宏内的main()是坏的,不好。

或再次运行return?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

是的,从protothread外部调用PT_INIT将重新启动它。如果您查看PT_RESTART的来源:

#define PT_RESTART(pt)              \
  do {                      \
    PT_INIT(pt);                \
    return PT_WAITING;          \
  } while(0)

这正是它的作用,但随后也从线程中返回(如收益)。正如你所说,它的设计是从原始纹内部调用的。

protothread结构基本上只是一个数字,表示它在线程中的位置:

struct pt {
  lc_t lc; // where lc_t is an unsigned short;
};

所以我们唯一需要做的就是将这个数字重置为零,这正是PT_INIT所做的。