Qthread调用只运行一次
Qthread calls run only once
您好,我正在尝试在Qt上的控制台应用程序中创建线程。
我的主要方法是:#include<featurematcher.h>
#include<QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
FeatureMatcher * fm = new FeatureMatcher();
fm->start();
return a.exec();
}
我的FeatureMatches类如下:
#ifndef FEATUREMATCHER_H
#define FEATUREMATCHER_H
#include<QThread>
class FeatureMatcher:public QThread
{
Q_OBJECT
public:
FeatureMatcher();
void run();
};
#endif // FEATUREMATCHER_H
和CPP文件:
#include "featurematcher.h"
#include <iostream>
FeatureMatcher::FeatureMatcher()
{
}
void FeatureMatcher::run()
{
std::cout<<"Process"<<std::endl;
}
我的问题是,当我开始运行程序,它只调用运行方法一次。我期望输出是无限数量的"过程"打印出来,但它只打印一次。我在哪里失踪?
首先,继承QThread
通常不是一个好主意。但是,如果你必须这样做,你就必须自己实现循环。有两种方法。
可以创建一个QTimer
,然后运行QThread::exec
:
void FeatureMatcher::run()
{
this->moveToThread(this);
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), SLOT(onTimer()));
timer->setInterval(1000);
timer->start();
exec();
}
或者你可以创建一个无限循环:
void FeatureMatcher::run()
{
while (1) {
std::cout<<"Process"<<std::endl;
}
}
更新第一个例子# 2。
虽然我同意Amartel上面所说的("继承QThread不是一个好主意")。这仍然是一种选择。
如果你仍然想继承QThread(你真的,可能不需要),试试这个:
#ifndef FEATUREMATCHER_H
#define FEATUREMATCHER_H
#include<QThread>
class FeatureMatcher:public QThread
{
Q_OBJECT
public:
FeatureMatcher();
void loopRun();
private:
void run();
};
#endif // FEATUREMATCHER_H
然后将looprun()函数添加到.cpp文件中:
#include "featurematcher.h"
#include <iostream>
FeatureMatcher::FeatureMatcher()
{
}
void FeatureMatcher::run()
{
std::cout<<"Process"<<std::endl;
}
void FeatureMatcher::looprun()
{
while(1){
start();
}
}
我希望我能帮到你。在很少的情况下继承QThread是有益的。这是一个与QThread模块一起工作/帮助开发的人的博客文章,解释了一些困惑:https://blog.qt.io/blog/2010/06/17/youre-doing-it-wrong/
然而,这篇文章提出了一些反对总是使用工作线程而不是子类化QThreads的论点:http://woboq.com/blog/qthread-you-were-not-doing-so-wrong.html
相关文章:
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么 zlib 放气初始化调用一次不起作用?
- 什么是仅调用一次并调用参数的控制台应用
- 谷歌基准测试,如何只调用一次代码?
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- 调用函数一次用于动态链接库,一次从可执行文件调用函数
- 在可变函数调用中执行一次语句
- 我应该只在免费商店上为一次调用创建对象吗?
- 如果初始化需要shared_from_this,如何在一次调用中构建一个类
- GoogleMock:如何保存参数,以便在模拟上的下一次调用中使用
- C++错误,隐 <function-style-cast> 式要求使用模板化类一次调用多个构造函数的多个转换
- C++ 向量元素被最后一次调用push_back替换
- 在一次调用C++11中启动多个线程
- opengl/glut 中的 renderDisplayFunc 不止一次调用 myfunc
- 为什么popn()一次又一次调用返回相同的输出
- 如何只对move构造函数进行一次调用?
- 通过一次调用c++将整个二进制文件读取到一个数组中
- 在一次调用中重置使用 iomanip 所做的所有更改的类:setprecision、setfill 和标志
- 圆函数:一次调用绘制多个圆