Допустим, у меня есть несколько этапов, например, во время установки программного обеспечения.
Каждый шаг отображает текстовое поле и ждет, пока пользователь нажмет кнопку «Далее».
Стандартный способ сделать это - вызвать обратный вызов, подобный этому:
process
{
Dialog1() // Will call callback2 when closed
}
callback2()
{
Dialog2() // Will call callback3 when closed
}
callbak3()
{
Dialog3() // Will call callback4 when closed
}
Этот метод делает код совершенно нечитаемым, когда есть много шагов, так как вам нужно разделить процесс на каждую последующую функцию обратного вызова (неупомянуть сохранение контекста от одного к другому).
Что может быть проще для чтения, как это сделать?В идеале процесс должен выглядеть следующим образом:
process()
{
Dialog1()
callback1() // stop method until closed
Dialog2()
callback2() // stop method until closed
Dialog3()
callback3() // stop method until closed
}
Проблема в том, что вы не можете остановить поток пользовательского интерфейса.Любая идея или обходной путь будут очень цениться.
PS: это как работать в C или Objective C
ОТВЕТ
Итак, после обнаружениясопрограммы благодаря Martin B Я нашел эту страницу: https://stackoverflow.com/posts/4746722/edit и в итоге использовал этот код:
define coRoutineBegin static int state=0; switch(state) { case 0:
define yield do { state=__LINE__; return;
case __LINE__:; } while (0);
define coRoutineEnd }
void process()
{
coRoutineBegin
Dialog1()
yield
Dialog2()
yield
Dialog3()
yield
Dialog4()
yield
coRoutineEnd
}