我想弄清楚如何使用协程(在Lua中)处理事件。我看到一种常见的做法似乎是创建包装函数,它产生当前的协同程序,然后在等待的东西出现时恢复它。这似乎是一个很好的解决方案,但这些问题呢? :什么是使用协程进行事件处理的正确方法?
你如何等待多个事件在同一时间,分支取决于哪一个先来?还是应该重新设计程序以避免这种情况?
如何取消一段时间后的等待?事件循环可以在其套接字发送/接收包装中有超时参数,但是自定义事件呢?
如何触发协程从外部改变其状态?例如,我想要一个被调用的函数,会导致协程跳转到不同的步骤,或者开始等待不同的事件。
编辑:
目前我有,我注册一个协程与事件的系统和协程获取与每次事件发生时的事件名称和信息作为参数恢复。在这个系统中,1和2不是问题,3可以通过使coro期望一个特殊的事件名称来使其跳转到不同的步骤,并以该名称作为arg来恢复。自定义对象也可以有方法以相同的方式注册事件处理程序。
我只是想知道这是否被认为是使用协程进行事件处理的正确方法。例如,如果我有读取事件和计时器事件(作为读取超时),并且首先发生读取事件,则必须手动取消计时器。它似乎不适合顺序特性或与协程一起处理事件。
“我只是想知道这是否被认为是使用协程进行事件处理的正确方法。”如果它适合你,那么这是正确的方式。为什么你会使用一个计时器事件来暂停另一个事件?简单地在您的事件系统中内置超时是否更有意义? – 2012-07-24 18:57:24
“如果它对你有用,那么它是正确的方式”它工作正常(但不是很好),我认为可能有更好的方法,但我错过了它,因为我不是非常与协程的家族。 “你为什么要使用计时器事件来暂停另一个事件?”。我可以,但自定义事件源将都必须实现超时。也许我可以通过添加一个系统来使用主事件循环注册自定义事件源来解决这个问题?最后,也许我应该让处理程序在第一次触发时自动删除? – mtk358 2012-07-24 19:22:34