c - Lua 加载屏幕 - courotines 与 C 线程

标签 c multithreading lua coroutine

现在我使用此处描述的类似方法来加载资源

http://www.lua.org/pil/9.4.html

喜欢

  • 读取文件 1
  • 渲染
  • 读取文件 2
  • 渲染
  • ...

优点:使用普通的 lua,简单。

相反:它不是并发的,每个文件读取都会阻塞渲染,然后才转到下一个文件。 此外,如果您需要处理数据(例如,从源代码创建着色器程序,或解码图片并创建纹理),您需要将其传递给 C 并将其取回。

过去我使用 C 线程调用 lua 函数,然后它们完成加载文件。

优点:它是并发的。您可以在 C++ 端处理加载的数据

相反:你需要将加载的数据传回Lua

也许我在这两方面都做错了,有更好的方法使用 Lua + C 加载和处理数据吗?

最佳答案

我会在这里采用混合方法,使用两种类型的线程:

  • 处理线程,从消息队列中读取数据并实际加载资源。
  • 加载器线程运行 Lua,通过将请求排队来异步处理文件。

通过添加更多特定类型的线程,它可以很好地扩展。

当然,您应该通过分析当前的实现来确保确实值得这么麻烦。使用线程和消息队列会添加更多 C/C++ 代码。毕竟这只是一个加载屏幕;)

关于c - Lua 加载屏幕 - courotines 与 C 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24155580/

相关文章:

java - 线程。继续使用相同的信息(运行时可变)

java - 球不动;线?

tcp - 发送大量数据时滞后

Lua os.date() - *t 和 !*t 有什么区别

c - 在两个代码中错误地使用了 C 中的 extern

c - 跨多个文件的变量访问

java - 实例变量同步

c - 幂为-3/2或-5/2的c语言pow函数的实现

c - 在 C 中添加对换行符 (\n) 的支持

c++ - LuaBind:如何将类的特定实例绑定(bind)到 Lua?