我在Lua中有一个库,它为协议创建并解析数据包。当我发送一个数据包时,我期待从目的地回复一个答案,然后解析成一个表格。我试图在这个库中编写一个包装器,以便我可以进行如下函数调用:result = SendUnicast(dest,packetData)
并将解析的响应表返回给结果。在Lua中等待异步事件
我的问题有两个:1)传入的消息异步进入和执行脚本不同的线程和2)我收到的下一个数据包不一定是我的请求的响应,我必须解析传入数据包并匹配序列号。
程序流程目前看起来是这样的:
[C#UI线程]
- 按钮单击
- 运行的Lua脚本
- 呼叫SendUnicast
- 等待回应
[C#数据螺纹]
- 输入消息
- 通行证消息到Lua解析器函数
- 如果序列匹配等待命令,存储解析表,恢复封锁
[C#UI主题]
- 的Lua素文字回报分析表
我似乎无法找到阻止当前正在执行的脚本(UIThread)的好方法。创建协调程序,当消息被解析时调用,然后while coroutine.status(co) ~= "dead"
似乎杀死我的lua解释器。
编辑
我标志着BMitch的答案接受,因为它是处理这个问题的正确方法。然而,我会警告你,LuaInterface不支持协程,我不得不自己为它们添加对C#代码的支持。
我的意思是操作系统线程。我编辑我的帖子,使其更清晰。我只有一个Lua国家。我认为,如果你在一个状态上运行代码,然后另一个线程试图在同一状态下运行其他代码,Lua处理不好。 – kyork
@kyork,我已更新OS线程。 – BMitch
请注意,您可以像使用'lua_pcall'一样使用'lua_resume',但请参阅我的问题以了解可能会产生的问题:http://stackoverflow.com/questions/6625698/how-to-handle-errors-when-恢复-Lua线程协程 – BMitch