协程:如何判断Windows光纤是否已完成执行?

时间:2013-12-25 06:13:52

标签: c windows coroutine fiber

我使用以下函数作为Windows光纤的入口点。

void foo(void*) {
    for(int i =0; i < 10; ++i) { doStuff(); }
}

现在我在主循环中调用SwitchToFiber for a循环;如下所示。

int main() {
    ... create the fiber and stuff

    for (int i = 0; i < 50; ++i) {
        SwitchToFiber(foo_fiber_ptr);
        // how do I tell if foo has already finished execution?
        // (without passing in a state variable to communicate.)
        if (someCondition) { break; }
    }

    ... do stuff
}

所以我的问题是: 如何判断foo是否已经完成执行?(不传入状态变量或声明全局状态变量进行通信。)

2 个答案:

答案 0 :(得分:0)

声明一个全局变量。执行foo函数后,在foo中更改全局变量的状态。

main中检查状态变化。如果更改了全局变量的状态,则表示已经执行了foo

答案 1 :(得分:0)

  

如何判断foo是否已经完成执行?

您告诉您看到整个节目的终止 - 请参阅Fibers

  

如果光纤功能恢复,则运行光纤的线程将退出。