Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
Qt 在几个QQuickWindows上调用update()插槽时,CPU负载急剧增加_Qt_Animation_Qml_Cpu_Qtquick2 - Fatal编程技术网

Qt 在几个QQuickWindows上调用update()插槽时,CPU负载急剧增加

Qt 在几个QQuickWindows上调用update()插槽时,CPU负载急剧增加,qt,animation,qml,cpu,qtquick2,Qt,Animation,Qml,Cpu,Qtquick2,我发现在几个QQuickWindows上创建一个调用update()插槽时,我的应用程序在时间上消耗了越来越多的CPU资源 下面是一个简单的测试程序: import QtQuick 2.3 import QtQuick.Controls 1.2 import QtQuick.Window 2.2 ApplicationWindow {visible: true; width: 640; height: 480; Window{ height: 100; width: 100

我发现在几个QQuickWindows上创建一个调用update()插槽时,我的应用程序在时间上消耗了越来越多的CPU资源

下面是一个简单的测试程序:

    import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Window 2.2

ApplicationWindow {visible: true; width: 640; height: 480;
    Window{  height: 100;  width: 100; visible: true; objectName: "w1"; id:w1; }
    Window{  height: 100;  width: 100; visible: true; objectName: "w2"; id:w2; }
    Window{  height: 100;  width: 100; visible: true; objectName: "w3"; id:w3; }

    Timer {
        interval: 30
        repeat: true
        running: true

        onTriggered: {
            w1.update();
            w2.update();
            w3.update();
        } 
    }
}
如果我使用
加载程序
完全重新加载QQuickWindows,一切都会重置,CPU负载从一开始就开始增加

使用以下两个系统测试了此问题:

  • Ubuntu 12.04+Qt5.4.2+英特尔视频+开源视频驱动程序

  • Ubuntu14.04+Qt5.3.2+radeon_视频+开源视频驱动程序

我需要一个快速修复这个!!!我已经尝试定期调用
releaseResources()
方法和
resetOpenGLState()
方法
QQuickWindow


同样有趣的是,当我在我的
main.cpp
中应用
putenv(“LIBGL\u ALWAYS\u SOFTWARE=1”)
时,这个问题消失了,我的cpu使用率一直很低。但在我的实际应用程序中,我需要硬件渲染,所以这不是我的选择


有人可以测试这个问题或给我一个建议吗?

我已经在我的
Ubuntu 14.04+Qt5.4+amd专有驱动器上测试了你的代码,没有增加CPU负载(它保持不变)。每30毫秒重新加载一次图像,帧速率为33.3 fps。我猜您使用的是开源驱动器,但在渲染方面不太好。尝试在我们的amd机器上使用amd专有驱动器

我已经在我的
Ubuntu 14.04+Qt5.4+amd专有驱动器上测试了你的代码,CPU负载没有任何增加(保持不变)。每30毫秒重新加载一次图像,帧速率为33.3 fps。我猜您使用的是开源驱动器,但在渲染方面不太好。尝试在我们的amd机器上使用amd专有驱动器

尝试在单独的图像元素中实例化两个图像,并使用visible控制它们的可见性:swI仅交换两个图像,因为它只是一个测试程序。在我的实际程序中,我从相机中获取图像。我花了一天的时间才明白CPU的问题与相机无关,而是与图像绘制(甚至可能只是一个窗口内容重画)有关。这对我来说非常出乎意料。另一个非常有趣的是,当我应用putenv(“LIBGL_ALWAYS_SOFTWARE=1”);在main.cpp中,这个问题消失了,我的cpu使用率一直很低。但在我的实际应用程序中,我需要硬件渲染,所以这不是我的选择。尝试在单独的图像元素中实例化两个图像,并使用visible控制它们的可见性:swI正在交换两个图像,因为它只是一个测试程序。在我的实际程序中,我从相机中获取图像。我花了一天的时间才明白CPU的问题与相机无关,而是与图像绘制(甚至可能只是一个窗口内容重画)有关。这对我来说非常出乎意料。另一个非常有趣的是,当我应用putenv(“LIBGL_ALWAYS_SOFTWARE=1”);在main.cpp中,这个问题消失了,我的cpu使用率一直很低。但在我的实际应用中,我需要硬件渲染,所以这不是我的选择。是的,这对我来说很有效。简单的程序以恒定的CPU使用率运行!非常感谢。但是我的主要应用程序拒绝与这个驱动程序一起工作。它抱怨缺少swrast_dri.so,并在尝试绘制着色器时出错。现在正试图修复它。@DimaK是因为您一直打开
LIBGL\u ALWAYS\u SOFTWARE
吗?不是。是因为我的主程序试图使用开源驱动程序。我编辑了.pro文件,它开始正常工作。但我的目标PC带有radeon x300视频适配器,并且专有驱动程序不再支持它。旧版驱动程序拒绝在ubuntu 12.04上安装。因此,我试图找到其他解决办法。我已经尝试安装新的(10.5.8)mesa库,但问题仍然存在。。。不知道还有什么好尝试的。是的,这对我很有效。简单的程序以恒定的CPU使用率运行!非常感谢。但是我的主要应用程序拒绝与这个驱动程序一起工作。它抱怨缺少swrast_dri.so,并在尝试绘制着色器时出错。现在正试图修复它。@DimaK是因为您一直打开
LIBGL\u ALWAYS\u SOFTWARE
吗?不是。是因为我的主程序试图使用开源驱动程序。我编辑了.pro文件,它开始正常工作。但我的目标PC带有radeon x300视频适配器,并且专有驱动程序不再支持它。旧版驱动程序拒绝在ubuntu 12.04上安装。因此,我试图找到其他解决办法。我已经尝试安装新的(10.5.8)mesa库,但问题仍然存在。。。不知道还有什么好尝试的。