[英]How to fix processor affinity for Qt 5.9 Thread on Windows with Ryzen 7
我一直在使用Qt 5.9的OpenSceneGraph-3.4.0和GUI开发硕士论文程序(否则在Visual Studio 2015和2017中)。 在工作中,一切正常,但是现在我家里有一台新计算机,我试图使其运行。
然而,当我呼吁观众框架()方法中,我得到了一个读访问冲突QtThread.cpp
在setProcessorAffinity(unsigned int cpunum)
具体表现在以下行:
QtThreadPrivateData* pd = static_cast<QtThreadPrivateData*>(_prvData);
这是完整的功能(QtThread.cpp是OSG的OpenThreads的一部分):
// Description: set processor affinity for the thread
//
// Use: public
//
int Thread::setProcessorAffinity(unsigned int cpunum)
{
QtThreadPrivateData* pd = static_cast<QtThreadPrivateData*>(_prvData);
pd->cpunum = cpunum;
if (!pd->isRunning) return 0;
// FIXME:
// Qt doesn't have a platform-independent thread affinity method at present.
// Does it automatically configure threads on different processors, or we have to do it ourselves?
return -1;
}
OSG中的查看器设置为osgViewer::Viewer::SingleThreaded
,但是如果我删除该行,则会在GraphicsWindowQt.cpp
(属于OsgQt的一部分)中收到错误“无法使QOpenGLContext在另一个线程中成为当前状态”,因此可能是死胡同。
编辑以澄清
我在osgViewer :: Viewer对象上调用frame()
。 在此函数中,查看器调用realize()
(这是Viewer类的函数)。 在其中setUpThreading()
(这是Viewer Base类的函数)。 这依次调用OpenThreads::SetProcessorAffinityOfCurrentThread(0)
在其中执行以下代码:
Thread* thread = Thread::CurrentThread();
if (thread)
return thread->setProcessorAffinity(cpunum);
线程(在第一行之后)的值为0x00000000fdfdfdfd
,对我来说似乎是一个错误。 无论如何,最后一个电话是我在原始问题中发布的电话。
我什至不知道从哪里开始修复此问题。 我认为,这是一些与处理器有关的问题。 我的处理器是Ryzen 7 1700(在工作中是Intel i7 3770k),所以也许有帮助。 否则,我在家中使用Windows 10,而在工作中则是Windows 7。
我将非常感谢您的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.