假设我有几个步骤,例如在软件安装过程中。

每个步骤都会显示一个文本框,并等待用户单击“下一步”按钮。

标准的方法是有这样的回调:

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/

10-10 09:19