猿问

Python - PyQt:QThread 的内存问题

我想构建一个 Qt 接口来控制相机采集。

我想要什么: 在进入硬件通信之前,我正在测试一个控制“假相机”的 GUI,一个连续循环,如果启动,每 100 毫秒给出一个随机图像。图像采集在单独的线程中运行,以便用户可以与 GUI 进行交互。用户可以通过按钮开始和停止采集。

 想怎么做我的第一次尝试是简单地 istanziate aQThread并调用该run()方法,然后该方法将包含一个无限循环,其中单个图像采集由 a 交错QThread.sleep(0.1)。我注意到在停止并重新启动线程后,程序开始滞后并在一段时间后崩溃。通过阅读周围的一些帖子和主要的Qt 网页,我了解到做我想做的事情的最好方法是:

子类 aQObject来创建一个工人。实例化这个工作对象和一个QThread. 将工作线程移动到新线程。

此外,按照这篇文章中的想法,我添加了一个QTimer对象来无限期地迭代线程内的工作线程,并且我实现了一个active标志,如果它设置为False. 这个解决方案在开始时似乎有效。我可以根据需要多次开始、停止和重新开始采集。

问题:

1) 当相机未获取时,CPU 总是占用相当多的资源(在我的情况下,大约为 30%,根据 Windows 任务管理器)。

2)有时,在开始采集后,内存开始被填充,就像每个新图像都分配在新内存中(我猜它应该被覆盖),直到程序变得无响应然后崩溃。下图是发生这种情况时我在任务管理器中看到的:

红色箭头对应于采集开始的时间。

我哪里做错了?这是正确的方法吗?


慕桂英4014372
浏览 441回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答