1

待機/遅延状態を終了する方法があるかどうか知りたいです。

QTest::qwait(ms)コードに応答遅延を追加するために使用しています。今、私はこの遅延を終了/中断したいと思います。たとえばQTest::qWait(2000)、2 秒の遅延が開始されるので、この 2 秒の待機時間を終了するにはどうすればよいですか?

注:QTimer私のコードには適しておらずQtest:qwait、遅延を追加するために使用しています。

4

1 に答える 1

1

簡単な答え: できません。問題は、 QTimer を使用している場合でも、QTimer のタイムアウトが待機時間を停止することになっているとしましょう。タイムアウト信号を何に接続しますか? または、接続されたタイムアウト スロットは何を実行し、待機を停止するためにどの関数を呼び出すでしょうか?

あなたの最善の策は、静的メソッドを使用して現在のQThreadQThread::currentThreadへのポインターを取得し、それを使用して待機条件を課すために使用し、外部スレッドを使用して条件で停止することです。スレッドを 2 秒間待機させる、またはプロセスが 9999999999 までカウンターにインクリメントするまで待機させる例を見てみましょう。その場合、最初に独自のクラスを作成し、それをコードで使用する必要があります。QThread::wait(2000)

class StopThread : public QThread {
private:
    QThread* _thread;

public:
    StopThread(QThread*);
    void run();
};

StopThread::StopThread(QThread* thread) {
    _thread = thread;
}

void StopThread::run() {
    //Do stuff here and see when a condition arises
    //for a thread to be stopped
    int i = 0;
    while(++i != 9999999999);
    _thread->quit();
}

そしてあなたの実装では:

QThread* thread = QThread::currentThread();
StopThread stopThread(thread);
stopThread->exec();
thread->wait(2000);

テスト方法でこれを行う必要があることは理解していますが、私が行っている限り、別の方法は考えられません。それが役に立てば幸い :)

于 2011-02-22T15:46:11.980 に答える