从并行线程在主 Maya 线程上执行代码
Execute code on Main Maya Thread from Parallel Thread
在MacOS上开发Maya API插件时,我正在尝试在并行线程中进行一些繁重的计算,然后将结果存储在OpenGL VBO中。
线程的创建和执行工作正常,直到我需要执行 GL 操作,当 Maya 崩溃时。
我使用 OpenGL 启用了多线程CGLEnable( CGLGetCurrentContext(), kCGLCEMPEngine);
但这没有帮助。 因此,我的想法是在并行线程上进行计算,完成后在主线程中执行 GL 操作。
如何从并行线程在主线程上执行某些功能?
{ // Main thread
MStatus stat = MThreadAsync::init();
if( MStatus::kSuccess != stat ) {
MString str = MString("Error creating MThreadAsync");
MGlobal::displayError(str);
}
else
{
MThreadAsync::createTask(createOpenGLVBOs, NULL ,NULL);
}
}
void createOpenGLVBOs(void *data) // PARALLEL THREAD
{
...heavy calculations...
GLuint nb;
glGenBuffers(1, &nb); --> CRASH
}
我很确定在后台调用任何 OpenGL 函数都会使应用程序崩溃。
OpenGL 调用只应在主线程中调用。
您可以使用数据填充共享数据结构,执行并行计算,然后在主线程上执行所有 opengl 调用。
或者,您可以使用 std::condition_variable 从后台线程向主线程发出信号,并让主线程在后台线程执行工作时调用 opengl 调用。您应该使用旋转锁或互斥锁来保护共享数据。
相关文章:
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- C++线程:如何在一个线程仍在运行时阻止另一个线程执行 (Win32)
- 在给定时间段内,线程执行的指令数量是否有最小数量?
- 如何在C++中停止线程执行
- 为什么Win API线程执行函数,而标准线程则没有
- 线程执行在IDE中和C 中的EXE应用程序中是否有所不同
- 从线程执行的函数中返回结构数组
- 为什么在从线程执行方法时使用QMetaObject::invokeMethod
- 只有一个线程执行 CUDA 内核
- C++ 多线程:执行顺序
- async_connect()超时,多个线程执行io_service.run()
- 是否可以将线程执行转移到另一个线程?
- 具有随机数总和的多线程执行时间
- 如何 在没有 Boost 的情况下将 C++ 成员函数作为线程执行
- openMP 在自定义容器中从 2 到 4 个线程执行二进制搜索时速度变慢
- 如何使生成的线程拖延足够长的时间以使生成线程执行某些操作
- 远程线程执行
- C++中的基本多线程(执行顺序)
- 线程池中的C++线程执行顺序
- 锁定由不同线程执行的多个函数