首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Corona SDK Lua中进行阻塞操作?

如何在Corona SDK Lua中进行阻塞操作?
EN

Stack Overflow用户
提问于 2013-01-08 04:02:25
回答 3查看 1.5K关注 0票数 3

我是LUA的新手,我正在使用Corona SDK用LUA编写一个tcp消息库。我坚持一个问题,套接字读取操作挂起应用程序UI,即使它在协程中运行。

如何启动协程:

代码语言:javascript
复制
function Messaging:readLoop()
   self.readCoroutine = coroutine.create(function() self:blockingLoop() end)
   coroutine.resume(self.readCoroutine)
end

阻塞循环:

代码语言:javascript
复制
function Messaging:blockingLoop()
   line,err,rest = self.sock:receive(BUFSIZE) -- <= Hangs UI if there is no incoming data 
end

当然,我知道协程并不等同于线程,但我预计LUA解释器在阻塞操作时会切换到另一个协程(就像GIL中的Python线程)。有没有可能在不阻塞UI的情况下从套接字读取数据?例如,使用真正的线程或异步方法?谢谢。

另外,消除BUFSIZ不是我的选择,因为我根本不想让UI被阻止,即使是0.2..0.4秒(缓慢的移动网络延迟)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-08 06:52:44

Corona contains LuaSockets可以让你进行异步套接字通信,如here所示。

票数 2
EN

Stack Overflow用户

发布于 2013-01-08 04:56:28

Corona有一个用于异步调用的network.request应用程序接口。

如果你不想使用它,可以看看this asynchronous http library

票数 1
EN

Stack Overflow用户

发布于 2013-01-09 04:03:49

基于MudSatheeshJM发布的链接,我最终制作了一个可能对某些人有帮助的消息传递类

代码语言:javascript
复制
-- Messaging prototype
Messaging = {sock = nil, sockTimer = nil}

-- Messaging constructor
function Messaging:new (o)
   o = o or {}
   setmetatable(o, self)
   self.__index = self
   return o
end

function Messaging:connect()
   self.sock = socket.tcp()
   print( self.sock:connect(HOST, PORT) )
   self.sock:settimeout(0)
   self.sockTimer = timer.performWithDelay(50, function() self:checkData() end, 0)
end

function Messaging:close()
   timer.cancel(self.sockTimer)
   self.sock:close()
end

function Messaging:checkData()
   local data, status, rest = self.sock:receive()
   local s
   if data then
      s = data
   else
      s = rest
   end
   if s:len() ~= 0 then
      print ('received', s)
   end
end

重要注意事项:

使套接字rest所需的数据,状态,rest= self.sock:receive() <-在大多数情况下,当出现“non-blocking

  • local”错误时,数据都会在"rest“变量中,这就是为什么我们需要下面的检查来了解数据到底是如何传输的
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14203163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档