1

run()コードをメソッドに実装できるように、Qthread をサブクラス化しました。いくつかのパラメータを渡す必要がありますが、

私はこのように試しましたが、ここで何が問題なのですか?

class QMyThread :
    public QThread
{
public:
    QMyThread();
    ~QMyThread(void);
    virtual void start(FILE *data, int sock, int bits);

protected:
    virtual void run(FILE *data, int sock, int bits);
};

メソッドを実行します。

void QMyThread::run(FILE *data, int sock, int bits)
{
//do stuff
}

スレッドを開始します。

QMyThread *thread;
thread->start(datafile, sockint, bitsint);

start()最初に、スレッドが初期化されていない可能性があると表示され、次にSIGSEGV error. 誰でも私を助けることができますか?

4

3 に答える 3

4

QThread を使用する推奨される方法ではなくなったため、QThread クラスをサブクラス化しないでください。

詳細についてはhttp://qt-project.org/doc/qt-4.8/qthread.html

あなたの質問に答えるために、これらのパラメーターをクラスのメンバーにして、セッターまたはそのコンストラクターを介してそれらの値を割り当てることはできませんか?

于 2013-03-06T16:06:57.190 に答える
1

代わりにこれを行う必要があります。

QMyThread thread;
thread.start(...)

スレッドへのポインタを作成しましたが、作成しませんでしnewた。率直に言って、ここにポインタの理由はありません。通常の変数を作成して、その変数でメソッドを呼び出すことができます。

ポインタが必要な場合はstd::unique_ptr、C++11またはboost::unique_ptr

std::unique_ptr<QMyThread> thread;
thread->start(...);

編集:

実際には、ドキュメントQThread * thread = new QThread(this);に従ってを作成する必要があります。

于 2013-03-06T15:59:03.613 に答える