我设置了一个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
?有什么建议吗?
答案 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
所做的。