2016-06-16 6 views

答えて

2

Qt::DirectConnectionで接続されたスロットは、信号がQTimerによって放出されるとすぐに呼び出されます。キューに入れられた接続を使用すると、スロットを呼び出すイベントがスケジュールされ、イベントループによって処理されます。 QTimertimerEventemit the timeout signalを使用します。

0

QTimerがタイムアウトすると、このQTimerの信号をスロットに結合するすべての信号 - スロット接続が、このスロットを正確に1回起動します。

1

いいえいいえ、別のスレッドで実行されていない限り、デフォルトではキューに入れられません。そのため、DirectConnectionです。

通常、イベントの順番を保証したいのであれば、イベントがキューに入るように同じスレッド内であってもタイマーのようなものでQt :: QueuedConnectionを使う方がよいこの行動はいくつかの "中断"のようなものであるため、ただimmidiatleyに作用するだけではありません。

しかし、実際にタイマーのタイムアウト()をすぐに有効にしたい場合は、Qt :: DirectConnectionを使用してください。この接続タイプにもっと注意する必要があると感じています他の通常のコードの真中)。タイマーは、通常のコードの途中でトリガすることができません

+1

:「通常のコード」私が意味することで

編集

...よく、以下のコメントを参照。タイマーはイベントによってトリガーされます。そのため、イベントループが必要です。ドキュメントの状態:['QTimerを動作させるには、アプリケーションにイベントループが必要です。つまりQCoreApplication :: exec()をどこかで呼び出す必要があります。タイマーイベントは、イベントループが実行されている間にのみ配信されます。]](http://doc.qt.io/qt-5/timers.html)。 – thuga

+0

私はQtプログラムで実行していると仮定して "正常"を意味します。したがって、exec()は実行されますが、申し訳ありませんがそれを仮定するべきではありません: –

+0

"正常なコードの真中に"という意味はまだ QCoreApplicationは、関数の実行中に、 というイベントを実行するための空き時間を取得し、 ではなく時間を取得しますか? –

関連する問題