1

これが私の状況です:

私は次のものを接続しました:

connect(timer, SIGNAL(timeout()), this, SLOT(avg()));
timer->start(5000);

avg() の時間計算は 1 秒です。したがって、avg 関数には平均 5 つの値が必要です。

avg() 関数の内部では、書き込みが許可されていますか?タイマーがアクティブな間、上記のように平均を計算します:

do
{ 
... // Saving all values, within the 5 seconds of timer and averaging them

}
while **(timer->isActive())**;

私の質問/問い合わせ: 太字のフィールド (timer ->isActive()) は、タイマーが固定の 5 秒からタイムアウトしていない間にループが機能し、治療を行うことを意味しますか?

4

1 に答える 1

2

いいえ、あなたはQTimer完全に間違った使い方をしています。その目的は時間を測定することではなく、指定された時間間隔でスロットを呼び出すことです。たとえば、 を呼び出すstartと、スロットは 5 秒後に呼び出され、5 秒後に再度呼び出されるなど、isActiveを呼び出すまでは常に true になりますstop

QElapsedTimerあなたの目的により役立つでしょう。startタイマーを初期化するために呼び出します。を使用して手順を終了する必要があるかどうかを確認しますtimer.elapsed() >= 5000

于 2013-07-11T09:42:32.557 に答える