多线程引擎窗口随机减速

时间:2009-09-11 16:57:40

标签: c++ multithreading windows-vista task windowed

我们有一个基于任务的多线程引擎设置,其中调度程序将任务传递给线程无锁队列。该引擎使用DirectX进行C ++渲染,我们使用boost :: thread来创建线程。在窗口模式下,它会随机减慢一秒左右,然后加速恢复。看起来这似乎是Vista造成的,但我们无法弄清楚如何正确解决它。

我们尝试的一件似乎有助于随机减速的事情是让线程在处理完每个任务后睡眠一毫秒,但它会导致其他问题并且不是一个很好的解决方案。

2 个答案:

答案 0 :(得分:1)

我建议做的第一件事是通过分析来了解导致减速的原因。

投入随机睡眠很少是一个好主意(根据这里的经验,是的,我已经完成了这个,是的,我已经解决了这个问题),并且没有推测性能问题的根源,特别是在多线程环境中。

Visual Studio 2010 beta1有一个很棒的分析器,非常适合理解导致速度减慢的原因,如果它在你的应用程序中,Hazim Shafi's blog介绍如何使用它。

您还可以查看windows performance toolkit中提供的xperf工具(您必须使用平台sdk安装程序,但需要安装该节点,因此它实际上非常漂亮快)。

答案 1 :(得分:0)

您是否尝试在XP和Windows 7下运行相同的代码?

我有一些多线程代码可以渲染到屏幕外兼容的位图。每个线程渲染到自己的兼容位图。然而由于一些奇怪的原因,这幅画需要在Vista上进行AGES。我失去了超过50%的处理时间到GDI渲染。在Win 7和XP下我没有这样的问题。有趣的是,我遇到了this article,这意味着Vista下的多线程GDI渲染无可救药地被打破。在某些时候,我将尝试提出一种方法,其中所有渲染都是由我的主线程而不是从辅助线程完成,以测试Vista性能是否提高。虽然我的主要市场使用XP所以这不是一个巨大的噩梦,所以我不是al;那个时候很生气...