为啥我不能从内部调用一个类的 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 函数?的主要内容,如果未能解决你的问题,请参考以下文章