c - OpenGL 多线程比使用单线程慢

标签 c multithreading opengl

我使用的是 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/

相关文章:

c - fprintf 在 C 中的使用

使用 union 计算 log2

c++ - boost::system::error_code::message() 使用 boost::asio 套接字抛出访问冲突异常

c++ - 是否可以使用 GL_TRIANGLE_FAN 或 GL_TRIANGLE_STRIP 绘制两个单独的四边形?

c - 在 C 中打开文件描述符

C- fprintf 两个变量在同一行

python - 如何停止线程python

multithreading - 分析多线程程序

c++ - 用OpenGL画圆

java - 在 OpenGL 中使用 GL_QUADS 渲染时,形状的一部分丢失