【发布时间】:2015-09-23 07:54:59
【问题描述】:
我想将QtConcurrent::run() 用于成员函数,但它似乎不使用指向实例的指针。相反,它看起来像调用了默认构造函数
#include <QObject>
#include <QDebug>
#include <QtConcurrent>
class Foo : public QObject
{
Q_OBJECT
public:
Foo(int n = 0):n(n){}
Foo(const Foo & f):Foo(f.n){}
void foo(){qDebug() << "Foo " << n;}
void bar(){QtConcurrent::run(this, &Foo::foo);}
private:
int n;
};
void test(){
Foo foo = Foo(2);
foo.foo();
foo.bar();
QtConcurrent::run(&foo, &Foo::foo);
QtConcurrent::run(&foo, &Foo::bar);
}
而运行test()的结果是:
Foo 2
Foo 0 // Should be a 2
Foo 0 // Should be a 2
Foo 0 // Should be a 2
编辑:我的实例确实超出了范围。此代码运行良好
void test(){
Foo * foo = new Foo(2);
foo->foo();
foo->bar();
QtConcurrent::run(foo, &Foo::foo);
QtConcurrent::run(foo, &Foo::bar);
}
【问题讨论】:
-
顺便说一句,为什么
foo是QObject的子类? -
qDebug()不是线程安全的。你不能在不同的线程中使用它。 -
@UmNyobe 因为我真正问题中的类继承自 QObject
-
@SaZ 你确定吗?我不认为你是对的。
-
“不使用原始实例” ...因为该实例不再存在
标签: qt qtconcurrent