【发布时间】:2021-01-02 09:13:26
【问题描述】:
我是初级程序员
最近,我使用 Halcon 库实现了图像的抓取。
当我按下实时按钮时,定时器开始抓取图像。它可以工作,但主屏幕冻结到计时器周期。
所以,我正在使用 Thread 提高图像抓取性能
首先我实现了这样的线程
[ImageUpdateWorker.h]
class ImageUpdateWorker : public QObject
{
Q_OBJECT
public:
explicit ImageUpdateWorker(QObject* parent = 0, QString strThreadName = "ImageUpdateWorker");
~ImageUpdateWorker();
signals:
void finished();
void grab();
public slots:
void run();
private:
bool m_bStop{ false };
};
[ImageUpdateWorker.cpp]
ImageUpdateWorker::ImageUpdateWorker(QObject* parent, QString strThreadName)
: QObject(parent)
{
setObjectName(strThreadName);
}
ImageUpdateWorker::~ImageUpdateWorker()
{
}
void ImageUpdateWorker::run()
{
while (m_bStop == false)
{
emit grab();
}
emit finished();
}
第二次我实现了继承的 QWidget UI Widget,输出屏幕像这样
m_pThread = new QThread();
m_pUpdateWorker = new ImageUpdateWorker(nullptr, strName);
m_pUpdateWorker->moveToThread(m_pThread); // UpdateWorker move to Thread
connect(m_pThread, SIGNAL(started()), m_pUpdateWorker, SLOT(run()));
connect(m_pThread, SIGNAL(finished()), m_pThread, SLOT(deleteLater()));
connect(m_pUpdateWorker, SIGNAL(finished()), m_pThread, SLOT(quit()));
connect(m_pUpdateWorker, SIGNAL(finished()), m_pUpdateWorker, SLOT(deleteLater()));
connect(m_pUpdateWorker, SIGNAL(grab()), this, SLOT(onGrab()));
当我调用“m_pThread->start();”时屏幕开始阻塞:(
如果您有任何建议或信息,我将不胜感激。感谢您的阅读。
【问题讨论】:
-
当
process被调用时,grab被发射了多少次? -
我不知道确切的计数。一件事是grab被发射了很多次。 @JarMan
-
对,我不需要确切的数字。但这几乎肯定会导致您在循环内发出信号的方式出现问题。为什么需要如此频繁地发射?
-
当我添加睡眠时,循环冻结没有修复。我不知道为什么抓着会冻死。
-
process是如何被调用的?