【发布时间】:2011-03-04 20:42:26
【问题描述】:
我正在使用 LUA 制作 IRC 客户端。我正在使用“Lua for Windows”附带的库。所以我用 luasocket 做通讯,用 IUP 做 UI 位。
我遇到的问题是我在读取 IO 时陷入了循环。我尝试了 IUP 中的计时器,但似乎不起作用。
我正在寻找一种方法来延迟 IO 读取循环。
我将读取的超时时间设置为 0 并且有效。
【问题讨论】:
我正在使用 LUA 制作 IRC 客户端。我正在使用“Lua for Windows”附带的库。所以我用 luasocket 做通讯,用 IUP 做 UI 位。
我遇到的问题是我在读取 IO 时陷入了循环。我尝试了 IUP 中的计时器,但似乎不起作用。
我正在寻找一种方法来延迟 IO 读取循环。
我将读取的超时时间设置为 0 并且有效。
【问题讨论】:
您可能正在 GUI 线程内的 TCP 套接字上进行阻塞读取。如果您没有及时收到预期的数据,这将锁定您的整个应用程序。在单独的线程中执行套接字 I/O(参见 Lua Lanes)或使用非阻塞 I/O(参见 settimeout)。
Kepler Project 是一个很好的资源,用于指导使用 Lua 进行网络应用程序,但它侧重于 Web 应用程序而不是 IRC 客户端。例如,Copas 库使用Lua coroutines 来处理多个 TCP 连接。
现在,如果您真的只是想知道如何在 Lua 中创建延迟,那么 lua-users wiki 中的 Sleep Function 文章应该会提供您需要的所有信息。
【讨论】: