我是 LUA 的新手,我正在使用 Corona SDK 在 LUA 中编写一个 tcp 消息传递库。我遇到了一个问题,即套接字读取操作会挂起应用程序 UI,即使它是在协程中运行的。
我如何启动协程:
function Messaging:readLoop()
self.readCoroutine = coroutine.create(function() self:blockingLoop() end)
coroutine.resume(self.readCoroutine)
end
阻塞循环:
function Messaging:blockingLoop()
line,err,rest = self.sock:receive(BUFSIZE) -- <= Hangs UI if there is no incoming data
end
当然我知道协程不等于线程,但我希望 LUA 解释器在阻塞操作上切换到另一个协程(比如带有 GIL 的 Python 线程)。是否有可能在不阻塞 UI 的情况下从套接字读取?例如使用真正的线程或异步方法?谢谢。
PS 消除 BUFSIZ 不是选项,因为我根本不想阻止 UI,即使是 0.2..0.4 秒(移动网络延迟慢)