![]() |
1
1
你核实了这么久的事情了吗?也就是说,它是对coInitializeEx()的调用吗?每个任务绝对不需要调用CoInitialize一次。你也不知道你产生了多少线程,也就是说,如果你在双核上运行并且你的工作是CPU密集型的,不要期望超过2倍的加速,如果你的工作是 不是 CPU密集型,然后它在等待一些资源(内存、磁盘、网络),加速也会受到类似的限制,如果对该资源持有锁,可能会更糟。 如果您可以使用Visual Studio 2010,请看一下并行模式库和异步代理库,有几个工具可以帮助您减少编写代码的工作量。 如果不能,至少可以尝试在tls中放置一个表示COM是否已在该线程上初始化的令牌,并在不需要时使用该令牌来绕过对coInitialize的调用。 |
![]() |
2
1
如果一个线程退出而不调用couninitialize,Windows将进行清理,我们知道这是有效的,因为如果没有,线程崩溃或中止时将不会进行清理。 所以,这种黑客行为造成问题的唯一方法是,有人试图将需要一套STA公寓的工作项目排队,这似乎不太可能。 我很想去买。 |