今朝Qtimerの周りに私の頭を包み込むのに少し問題があります。私はボタンをクリックすることにより開始されQTimerを持って遅れたQTimerが始まる?
:
は、ここで基本的な考え方です。 アクティブになったら、5分ごとに関数を呼び出します(start()と呼ぶ)。
スタートは()QtConcurrentを使用して(()が動作し、それを呼び出す)別々の関数を呼び出します。したがって、処理がまだ発生していても、すぐに戻ります。
ここに私の問題だ: 私は(仕事を呼びたい)一度他の後の回数、。私の問題は、現時点では、処理が終了する前にwork()関数を複数回呼び出すことです。ハードウェアとのインターフェイスは機能しないためです。
これについてはどうすればよいですか?
編集:ここでは
は、プログラムの基本的な流れである:
- ユーザーは、()startTimerをクリックします。
- のStartTime()スタート(
- )タイマーが信号を発するとき、それは(スタートを呼び出し
- )(timer->スタート呼び出すには)ありません 未来= QtConcurrent ::走行を行い、その後、いくつかの光UIのものを行います(...仕事()...)//作業に長い時間を要する watcher-> setFuture(*未来)
- 何とか(これは私の問題である)、仕事()が実行されたとき、私はそれを呼びたいですもう一度(正確には4回)
うーん、いいですね:この方法では、あなたがの洪水とすべてを一度に実行することができQTimerメッセージの大きなまでブロックされたキューで巻き取るの可能性を持っていません。しかし、実行が終了したら(そしてすぐにwork()を直ちに呼び出す)ために、どのようにチェックすべきですか? – hex4def6
作業関数の先頭にmutexlockerがあると、work()が終了するとmutexが呼び出されます。実行中、他のすべてのスレッドはwork()関数の先頭でブロックされます。ミューテックスがロック解除されるとすぐに、最初の待機中のスレッドがロックして実行を開始します。詳細については、[Qtスレッドの同期](http://doc.qt.nokia.com/latest/threads-synchronizing.html)を参照してください。 – pnezis
ohhなので、 "実行が拒否されました"よりも実行が遅い – hex4def6