【问题标题】: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() 函数。该错误可能很难找到,因此所有细节都很重要。

标签: c++ multithreading qt qthread


【解决方案1】:

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

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

希望有助于避免此类问题

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多