【问题标题】:Coroutine: How to tell if a windows fiber has finished execution?协程:如何判断 Windows Fiber 是否已完成执行?
【发布时间】:2014-01-13 05:05:51
【问题描述】:

我有以下函数用作 windows 光纤的入口点。

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

现在我在我的主循环中调用SwitchToFiber;类似于以下内容。

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 是否已经完成执行?(无需传入状态变量或声明全局状态变量进行通信。)

【问题讨论】:

    标签: c windows coroutine fiber


    【解决方案1】:

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

    你说看到你的整个程序终止 - 见Fibers

    如果您的 Fiber 函数返回,则运行 Fiber 的线程退出。

    【讨论】:

      【解决方案2】:

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

      main 中检查状态变化。如果全局变量的状态发生了变化,说明foo已经被执行了。

      【讨论】:

      • 谢谢,但我想知道是否有办法不通过检查用户定义的状态变量来做到这一点?
      猜你喜欢
      • 1970-01-01
      • 2014-06-08
      • 2021-06-06
      • 2011-07-25
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      相关资源
      最近更新 更多