Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重新创建线程的延迟是否比暂停/恢复线程的延迟低?_C++_Windows_Multithreading_Qt - Fatal编程技术网

C++ 重新创建线程的延迟是否比暂停/恢复线程的延迟低?

C++ 重新创建线程的延迟是否比暂停/恢复线程的延迟低?,c++,windows,multithreading,qt,C++,Windows,Multithreading,Qt,我最近使用Qt编写了一个矢量图形查看器 有一个RenderRead在后台运行,用于执行繁重的渲染工作 原子标志用于在处理下一个对象时停止渲染 在主/gui线程中,当需要更新时: 设置原子标志; 等待RenderThread实际停止; 应用更改并重新启动渲染作业。 我已经测试了2种同步方法: RenderThread找到原子标志集时,它只是从QThread::run方法返回,这使线程在QThread::wait上完成; 使用QWaitCondition,RenderThread实际上不会完成,而是

我最近使用Qt编写了一个矢量图形查看器

有一个RenderRead在后台运行,用于执行繁重的渲染工作

原子标志用于在处理下一个对象时停止渲染

在主/gui线程中,当需要更新时:

设置原子标志; 等待RenderThread实际停止; 应用更改并重新启动渲染作业。 我已经测试了2种同步方法:

RenderThread找到原子标志集时,它只是从QThread::run方法返回,这使线程在QThread::wait上完成; 使用QWaitCondition,RenderThread实际上不会完成,而是在互斥锁上等待。然后,gui线程锁定此互斥锁以应用更改,并在唤醒RenderRead之前将其解锁。 问题是,第二种方法存在明显的缓慢性,而第一种方法更平滑。差别不大,就像以50帧/秒和60帧/秒的速度玩3d游戏一样

测试日期:

win7、I3 3220、4gb ram win8,z3740d,2gb内存 对于qt4.8.6、msvc2008和所有这些,都给出了类似的结果


我一直被告知创建线程很昂贵,但在这种情况下似乎不是这样?

数字是多少,您具体测量了什么?在任何情况下,我怀疑如果您创建一个线程,它会立即被安排运行,而被阻止的线程在被解除阻止时不会立即重新启动。@Ulrich,好吧,我已经在主线程中使用QefersedTimer测量了stop wait restart过程的时间。但这两种方法之间没有明显的区别。所以我只能说差异是可以观察到的。然后使用更精确的测量。如果有差异,可以测量。