我需要在一个单独的线程中异步运行一个函数,我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
QtConcurrent::run使用QThreadPool默认值,它本身确定要执行多少线程。为此,它使用系统函数,相同的值可通过QThread::idealThreadCount(). 可以保证该值至少等于 1。该怎么办?自己创建一个池。某处如此
你必须看看代码。但有人怀疑这些不是编译错误,而是“代码提示”错误。QtCreator 有这个弱点——它可以无缘无故地判断代码中存在错误并用红色消息装饰整个代码。