我对使用线程进行编程完全不熟悉,并且因为类正在使用QThreads,所以我想知道为什么我不能从内部调用QThread的start
函数并使其run
函数启动独立于另一个线程执行(当我这样做时程序似乎崩溃)。相反,我必须从声明对象的任何地方调用start函数。这是为什么?
一些代码:
class ClassWithThread : public QThread
{
public:
ClassWithThread() {}
someFunction() {start();}
run()
{
//do some stuff here
}
}
这基本上就是我班级的作用。当我拨打someFunction
时,程序崩溃了。如果我从start
删除someFunction
语句,并从程序外部调用start
,那么它可以正常工作。
答案 0 :(得分:2)
QThread
只有在你想要扩展线程功能时才应该派生,而不是像你这样专门为你的工作专门化。此article可帮助您了解QThread
的使用情况。
所以你必须创建一个QThread并从外部启动它,然后将一个对象移动到它来完成这项工作。请阅读此示例:http://labs.qt.nokia.com/2006/12/04/threading-without-the-headache/
希望有助于避免此类问题