tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
スレッド・タイマ/サーバベース・タイマの使用方法(VB.NET) ( No.0 )  [親スレッドへ]
日時: 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 つのタイマーは別スレッドで動作するため、そうした問題はありませんが、
マルチスレッドを意識したコーディングが必要となるので、扱いには注意が必要です。



 [スレッド一覧へ] [親スレッドへ]