假设我有几个步骤,例如在软件安装过程中。
每个步骤都会显示一个文本框,并等待用户单击“下一步”按钮。
标准的方法是有这样的回调:
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
}
问题是您无法停止UI线程。任何想法或解决方法将不胜感激。
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
}
最佳答案
您正在寻找coroutines,它完全提供了您所寻找的概念:从函数产生控制而不退出它。本质上,您的代码如下所示:
process()
{
Dialog1()
yield
Dialog2()
yield
Dialog3()
}
不幸的是,协程不是由C或Objective C本身支持的,并且如果不借助丑陋的hacks,很难通用实现。但是,您可能可以将该概念作为针对您的情况的特殊情况构造的起点。
关于c - 除了UI编程的回调以外,还有其他选择吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4746722/