2016-04-14 4 views
0

私はarduinoモーションディテクタのモニタソフトウェアとして機能するプログラムを持っており、タイマーを通じてセンサーデータを要求しています。私はそれを作ったので、アラームはボタンを介して明示的にリセットする必要があります。したがって、私の質問は、検出変数を変更して有効にする前に、タイマーの有効化をfalseに設定したいですか?既に有効になっているタイマーを有効にする

tl; drすでに有効になっているタイマーを有効にするとどうなりますか?それは悪いですか、それともリセットされますか?

+1

最初に試してから、ここに来てみませんか? – niksofteng

+1

"*すでに有効になっているタイマーを有効にするとどうなりますか?*"何もありません。 *リセットしますか?* No. –

+0

どのようなタイマーですか?フォームタイマー、システムタイマー、スレッドタイマーなどがあります。このような質問を扱う優れた文書があります。また、非常に簡単にテストできます。 – itsme86

答えて

1

System.Windows.Forms.TimerのインスタンスでEnabledプロパティを設定しても、タイマーはリセットされません。 Enabledに割り当てた値が現在の値と異なる場合、つまり現在はFalseで、Trueまたは現在の値をTrueに設定し、Falseに設定した場合のみ、タイマーの状態が変更されます。

シーンの背後では、最初に起こるのは、オブジェクトに対して排他ロックが取得されることです。 .Net 2と3.5では、これはLock Statementの使用によって行われます。 .Net 4では、これはMonitor Class、より具体的にはMonitor.Enter()メソッドを使用して行われます。ロックが正常に取得されると、Enabledの新しく割り当てられた値が現在の値と異なるかどうかを判断するためのチェックが実行されます。

この情報は、System.Windows.Forms.dllアセンブリを逆コンパイルすることによって得られました。私はコードスニペットを掲示したでしょうが、そうすることの合法性については確信がありません。

要約すると、有効になっているときにタイマーをEnabled = trueに設定しても構いませんが、そのたびにオブジェクトの排他的取得が要求されていることに注意する必要があります。

+0

素晴らしい答え。とても有難い。 – domin8

関連する問題