0

私は自分のプログラムでタイマーを使用しています:
timer = new Qtimer(); connect(timer, SIGNAL(timeout()), this, SLOT(readData())); timer.start(1000);
そして、UIの相互作用によってトリガーされる可能性のある他のスロットもあります:
/*SLOT FUNCTION*/ on_pushbutton_triggered(){..../*write data*/...}

(コードはqtで書かれていますが、よくある質問だと思います)

だから私は潜在的な問題について心配しています:on_pushbutton_triggereed()がデータを書き込んでいる間にreadData()が間違ったデータを読み取る可能性がありますか?

私はタイマーが実際に画面の後ろでどのように機能するかについてあまりよく知りません:それは私のプログラムと同じスレッドにありますか?
readData()とon_pushbutton_triggereed()が呼び出され、実行され、シリアルに終了し、ミューテックスの問題は発生しません(つまり、lock()とunlock()を使用する必要があります)? 読んでくれてありがとう!私はあなたのヒントを本当に望んでいます!

4

1 に答える 1

1

Qtは、イベントループを使用して、一般に同時アクティビティを実装し、特に単一のスレッド内でQTimerを実装しています。イベントプロバイダー(この場合はQTimer)はイベントを生成し、それらをイベントループに公開します。次に、それらは公開の優先順位と順序に従って処理されます。このアプローチでは、一度に実行されるコードのセクションが1つしかないため、同期は必要ありません。したがって、データに安全にアクセスできます。

Unixライクなシステムps -eLfでは、コマンドはすべてのプロセス(出力のPID列)とそのスレッド(LWP列)に関する情報を表示します。NLWP列は、特定のプロセスにあるスレッドの数を示します。

于 2012-10-18T10:00:35.383 に答える