我使用的是 Windows 7 和 VC++ 2010,这是一个 32 位应用程序
我试图让我的渲染器以多线程方式工作,但事实证明我让它比不使用多线程时慢。
我希望它有一个主线程将渲染命令添加到列表中,以及一个工作线程来渲染这些命令。
这一切确实发生了,并且它很好地绘制到屏幕上,但这样做时我得到的 fps 较低......
我使用 Fraps 中的基准测试工具来获取此数据:
时间是对其进行基准测试的时间,在本例中为 30 秒。
Min、max、avg 都是 FPS 值。
使用多线程:
Frames, Time (ms), Min, Max, Avg
28100, 30000, 861,1025, 936.667
没有多线程:
Frames, Time (ms), Min, Max, Avg
21483, 30000, 565, 755, 716.100
这里是一些伪代码(带有相关的事件函数调用):
Main Thread:
Add render comands to queue
ResetEvent (renderCompletedEvent);
SetEvent (renderCommandsEvent);
WaitForSingleObject (renderCompletedEvent, INFINITE);
Render Thread:
WaitForSingleObject (renderCommandsEvent, INFINITE);
Process commands
SetEvent (renderCompletedEvent);
ResetEvent (renderCommandsEvent);
最佳答案
为什么您希望这会更快?
只有一个线程在做任何事情,您在一个线程中创建命令并向另一个线程发出信号并等待它完成,这将花费与在第一个线程中执行它一样长的时间,只是开销更大。
要利用多线程,您需要确保两个线程同时执行某些操作。
关于c - OpenGL 多线程比使用单线程慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11902228/