- 日時: 2009/12/26 13:35
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[日付・時刻][その他コントロール][] * * キーワード:タイマー,スレッド・タイマ,サーバベース・タイマ,Windowsタイマ,, * *********************************************************************************** タイトル : System.Threading.Timeクラス? 記 事 No : 8528 投 稿 日 : 2009/01/06(Tue) 18:36 元質問者 : ひでと
お世話になります。 Timerコンポーネントを使って、ボタンを押すとタイマーが動く処理を行っていましたが、 時間の誤差が大きくて困っています。 http://www.atmarkit.co.jp/fdotnet/dotnettips/373threadtimer/threadtimer.html にSystem.Threading.Timeクラスを使用する方法が書いてあるのですが、 内容的に理解できず、またどのように試してよいのかわかりません。
----------------------------------------------------------------------------------- 記事No : 8537 投稿日 : 2009/01/07(Wed) 18:23 回答者 : 花ちゃん ----------------------------------------------------------------------------------- Public Class Form1
Private count As Integer = 0 Private timer As System.Threading.Timer
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim timerDelegate As Threading.TimerCallback = New Threading.TimerCallback(AddressOf MyClock) timer = New Threading.Timer(timerDelegate, Nothing, 0, 1000) End Sub
Public Sub MyClock(ByVal o As Object) count += 1 Debug.WriteLine(count.ToString) End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click timer.Dispose() End Sub
End Class
-------------------------------------------------------------------------------- ついでに、System.Timers.Timerクラス の使用例
記事No : 8535 投稿日 : 2009/01/07(Wed) 11:55 回答者 : 花ちゃん -------------------------------------------------------------------------------- Public Class Form1
Private aTimer As New System.Timers.Timer() Private Count As Integer
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click AddHandler aTimer.Elapsed, AddressOf OnTimedEvent aTimer.Interval = 1000 aTimer.Enabled = True End Sub
Private Sub OnTimedEvent(ByVal source As Object, _ ByVal e As System.Timers.ElapsedEventArgs) Count += 1 Debug.Print(Count.ToString) End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click aTimer.Enabled = False End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, _ ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed aTimer.Enabled = False End Sub
End Class
----------------------------------------------------------------------------------- 記事No : 8539 投稿日 : 2009/01/07(Wed) 19:25 回答者 : 魔界の仮面弁士 ----------------------------------------------------------------------------------- 3 つのタイマの違いについては、下記を参照してください。
http://www.atmarkit.co.jp/fdotnet/dotnettips/373threadtimer/threadtimer.html http://www.atmarkit.co.jp/fdotnet/dotnettips/374timerstimer/timerstimer.html http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html
通常の用途であれば、Windows アプリでは System.Windwos.Forms を使うのが一般的です。 これはメッセージベースのタイマーであるため、手軽に扱えますが、その反面、 何か重い処理が行われている場合、イベントの発生を取りこぼす可能性があります。
他の 2 つのタイマーは別スレッドで動作するため、そうした問題はありませんが、 マルチスレッドを意識したコーディングが必要となるので、扱いには注意が必要です。
|