繁体   English   中英

如何使用Ryzen 7在Windows上修复Qt 5.9线程的处理器亲和力

[英]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.cppsetProcessorAffinity(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。

我将非常感谢您的帮助。

所以最后,OpenThreads似乎是一个问题(因此是OpenSceneGraph部分,我对此无能为力)。 将cmake用于OpenSceneGraph源时, 需要禁用选项“ BUILD_OPENTHREADS_WITH_QT”。

在OSG论坛中的此线程中找到了解决方案,所以感谢这个人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM