为啥我不能从内部调用一个类的 start 函数?

Posted

技术标签:

【中文标题】为啥我不能从内部调用一个类的 start 函数?【英文标题】:Why can't I call a class's start function from within itself?为什么我不能从内部调用一个类的 start 函数? 【发布时间】:2010-12-14 05:09:58 【问题描述】:

我对线程编程完全陌生,而且由于该类使用 QThreads,我想知道为什么我不能从自身内部调用 QThread 的 start 函数并让它的 run 函数开始独立于另一个函数执行线程(当我这样做时程序似乎崩溃了)。相反,我必须从声明对象的任何地方调用 start 函数。这是为什么呢?

一些代码:

class ClassWithThread : public QThread

public:
    ClassWithThread() 
    someFunction() start();
    run()
    
        //do some stuff here
    

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

【问题讨论】:

启动什么样的功能?静态的还是什么?请发布更多代码。 在调用 Qthread::start() 而不是 start() 之后得到相同的结果吗? @wrongusername 你得到什么编译器错误。 someFunction()run() 应该用它们的返回类型声明。 @Vijay:Q 从未提及任何编译错误,OP 仅提及崩溃/核心转储问题。 很难从这个伪代码中理解到底发生了什么。请为我们提供一个可以编译和测试的真实示例,包括一个实际创建对象并调用该函数的小型 main() 函数。该错误可能很难找到,因此所有细节都很重要。 【参考方案1】:

QThread 应该仅在您想扩展线程功能时派生,而不是像这样专门为您的工作而设计。这个article 将帮助您了解QThread 的用法。

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

希望有助于避免此类问题

【讨论】:

以上是关于为啥我不能从内部调用一个类的 start 函数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 java 函数没有从另一个类的输出调用?

为啥即使从类内部获取成员函数指针值也需要类名限定?

为啥扩展内部类的本地类不能访问内部类封闭实例?

为啥“基类对象”不能调用它自己的虚函数? C++

为啥内部类的private变量可被外部类直接访问

C++ 为啥我可以从派生类调用基类的私有虚函数?