我需要在一个单独的线程中异步运行一个函数,我QtConcurrent::run在测试 windows 时使用一切都很好,但是一旦我在 linux 上运行相同的代码,它就开始同步工作。
测试代码:
void myRunFunction(QString name)
{
for(int i = 0; i <= 1000; i++)
qDebug() << name << " " << i << "from" << QThread::currentThread();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFuture<void> t1 = QtConcurrent::run(myRunFunction, QString("A"));
QFuture<void> t2 = QtConcurrent::run(myRunFunction, QString("B"));
QFuture<void> t3 = QtConcurrent::run(myRunFunction, QString("C"));
t1.waitForFinished();
t2.waitForFinished();
t3.waitForFinished();
return a.exec();
}
告诉我如何解决这个问题,或者我还能尝试什么?
QtConcurrent::run在调用类函数时仍然存在误解 。Clang 给出以下内容no matching function for call to 'run':将编译器更改为mingw,错误更改为reference to non-static member function must be called
测试代码:
void A(int a)
{
qDebug() << a;
}
class my_class : public QObject
{
Q_OBJECT
public:
my_class(){}
void B(int a)
{
qDebug() << a;
}
void call()
{
QtConcurrent::run(B, 5);// не работает
QtConcurrent::run(A, 5);// работает
}
};
Qt 4.8
