2013-12-25 4 views
0

У меня есть следующая функция, которую я использую в качестве точки входа для окна.Coroutine: Как узнать, закончилось ли оконное стекло?

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 уже завершил выполнение

ответ

0

Объявите глобальную переменный? (Без прохождения в переменном состоянии или объявить глобальные переменные состояния для связи.). После выполнения функции foo измените состояние глобальной переменной на foo.

В main проверить состояние государства. Если состояние глобальной переменной изменено, значит, foo уже выполнен.

+0

спасибо, но мне интересно, есть ли способ сделать это не путем проверки пользовательской переменной состояния? –

0

Как определить, выполнено ли foo?

Вы говорите, что видите прекращение всей вашей программы - см Fibers:

Если ваша функция возвращает волокно, нить работает выходы волокна.