【发布时间】:2012-04-22 22:12:20
【问题描述】:
假设我正在运行一个脚本,并且游戏客户端在更新之前等待脚本完成。 Lua 可以做一些“超时”吗?比如,我可以设置更新的优先级,以便它离开脚本进行更新,然后在单词之后可以回到它在脚本中的位置吗?
【问题讨论】:
-
我认为你最好使用多线程。一个线程用于 Lua 脚本,另一个线程用于更新。
标签: lua
假设我正在运行一个脚本,并且游戏客户端在更新之前等待脚本完成。 Lua 可以做一些“超时”吗?比如,我可以设置更新的优先级,以便它离开脚本进行更新,然后在单词之后可以回到它在脚本中的位置吗?
【问题讨论】:
标签: lua
您还可以设置一个计数挂钩,其中包含适当的超时计数,并在挂钩中中止脚本的执行。
【讨论】:
Lua 使用协作多线程,因此脚本必须知道在将控制权交还给调用者之前花了多长时间。不难弄清楚它使用 os.time 运行了多长时间并获得了差异。在某些情况下,这可能会更困难,但如果脚本是一个循环,它应该不难。一旦发现运行时间过长,请执行 coroutine.yield(),当您想要恢复脚本时,只需从更新循环中调用 lua_resume。
【讨论】:
您可以在另一个线程中运行整个 lua_State 和 lua 脚本。当 Lua 脚本访问您实现的需要在主线程中修改内容的函数时,请使用互斥锁和其他东西来使该访问线程安全。
这样,你可以很容易地让你的 Lua 脚本挂起或做任何事情,而你的主线程可以继续正常运行,但是,它还需要你让所有实现的函数访问主线程可能正常处理的任何事情(像图形)是线程感知的。
【讨论】: