我正在做一些尝试 C++11 线程的开发。我想在异步线程中运行一些代码,当该代码完成后,我想在主线程上运行其他代码但只有当它完成时!
这是因为我想异步运行的事情是加载 OpenGL 的东西,并且在执行线程时使用 OpenGL 上下文有点棘手,据我所知,这几乎不是在不同的线程中运行相同的上下文。
但是我想创建一个加载器线程,它加载 collada 文件,这里真正耗时的东西是解析文件并设置数据,所有我可以(技术上)在一个单独的线程中做的事情,然后只是做主线程上的 opengl 特定任务。(这是我最初的想法,我可能只是走错路了)..
所以我在想,如果我可以分离一个异步线程来加载 collada 文件并填写数据,那么一旦完成,我将在主线程上调用以绑定缓冲区、设置着色器等等。我可以在没有线程的情况下做到这一点,但是在后台加载新数据时会非常顺利,而不会让 GL 吓坏..
所以我会尝试排列我想要做的步骤:
- 主线程到处做它做的事情......
- 有人要求加载新的网格
- 通过创建异步线程并在其中加载 collada 数据来初始化网格
- 同时主线程继续做它的东西
- 一旦collada加载完成,异步线程通知主线程它希望在主线程上进行额外的加载(即设置缓冲区等)。
- 设置完成,网格将自身添加到渲染队列
我确实让所有这些都同步工作,我想要的是一种在分离的异步线程完成后做一些事情的方法。
任何想法或对我的想法的建设性批评:P 都受到热烈欢迎!我可能在想这一切都是错误的方式,我一直在考虑做一些类似观察者模式的事情,但我真的不知道如何以最好的方式解决它。我不介意线程化OpenGL的东西,但这似乎有点像自找麻烦..