bialix (06.07.2012 17:00, просмотров: 485) ответил Vit на Я делаю иначе:)
ну собственно такой подход я и упоминал в своей портянке. Он понятен, но как по мне слишком уж низкоуровневый. Слишком много надо писать вспомогательной мишуры, которая отвлекает от основной идеи алгоритма. Вот как я хотел бы упростить вашу main_foo в своем гипотетическом велосипеде:
void main_foo(void){
...
ASYNC_CALL(async_func0); // will wait till done
...
TRY_ASYNC(ad finitum) ASYNC_CALL(async_func1) DO
on OK: pass;
on ERR: pass;
on TIMEOUT: raise "timeout!!!! oh my god!!!!"
END_ASYNC
}
Ну чисто чтобы выкинуть вот эти все явные while, do-while, которые то и нужны только чтобы имитировать главный цикл кооперативной оси. Надеюсь идея в моем синтетическом примере хоть немного просматривается.