为什么我不能从内部调用类的启动函数?

时间:2010-12-14 05:09:59

标签: c++ multithreading qt qthread

我对使用线程进行编程完全不熟悉,并且因为类正在使用QThreads,所以我想知道为什么我不能从内部调用QThread的start函数并使其run函数启动独立于另一个线程执行(当我这样做时程序似乎崩溃)。相反,我必须从声明对象的任何地方调用start函数。这是为什么?

一些代码:

class ClassWithThread : public QThread
{
public:
    ClassWithThread() {}
    someFunction() {start();}
    run()
    {
        //do some stuff here
    }
}

这基本上就是我班级的作用。当我拨打someFunction时,程序崩溃了。如果我从start删除someFunction语句,并从程序外部调用start,那么它可以正常工作。

1 个答案:

答案 0 :(得分:2)

QThread只有在你想要扩展线程功能时才应该派生,而不是像你这样专门为你的工作专门化。此article可帮助您了解QThread的使用情况。

所以你必须创建一个QThread并从外部启动它,然后将一个对象移动到它来完成这项工作。请阅读此示例:http://labs.qt.nokia.com/2006/12/04/threading-without-the-headache/

希望有助于避免此类问题