-1
我想为成员函数使用QtConcurrent::run()
,但似乎它不使用指向实例的指针。取而代之的是,它看起来像默认的构造函数被调用成员函数的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);
}
btw为什么'QObject'的'foo'子类? – UmNyobe
'qDebug()'不是线程安全的。你不能从不同的线程使用它。 –
@UmNyobe,因为我的课在我的真正问题继承自QObject – Fezvez