2

私はスレッドを使ったプログラミングにまったく慣れていません。クラスはQThreadsを使用しているので、なぜQThreadのstart関数をそれ自体の内部から呼び出して、そのrun関数を別のスレッドとは独立して実行し始めることができないのか疑問に思います(プログラムはクラッシュするようです。これを行う)。代わりに、オブジェクトが宣言された場所からstart関数を呼び出す必要があります。どうしてこれなの?

いくつかのコード:

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

それは基本的に私のクラスが行うことです。プログラムを呼び出すとsomeFunctionクラッシュします。startただし、ステートメントを削除し、プログラムの外部からsomeFunction呼び出すと、正常に機能します。start

4

1 に答える 1

2

QThreadこのような仕事に特化するのではなく、スレッド機能を拡張したい場合にのみ派生させる必要があります。この記事は、の使用法を理解するのに役立ちますQThread

したがって、QThreadを作成し、外部から開始してから、ジョブを実行するオブジェクトをQThreadに移動する必要があります。この例を読んでください:http://labs.qt.nokia.com/2006/12/04/threading-without-the-headache/

この種の問題を回避するのに役立つことを願っています

于 2010-12-14T09:17:00.733 に答える