【发布时间】:2011-01-20 11:48:11
【问题描述】:
假设我有几个步骤,例如在软件安装期间。
每一步都显示一个文本框,等待用户点击“下一步”按钮。
执行此操作的标准方法是使用如下回调:
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
}
【问题讨论】:
-
我讨厌 C 没有功能结构。这可以使用 continuations 以函数式语言(例如 javascript)完美表达。
标签: c design-patterns user-interface callback