C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 27 を表示中)
■12652 / )  Windowsタイマとスレッドタイマの違い
□投稿者/ タカ (1回)-(2008/01/14(Mon) 02:00:05)

分類:[.NET 全般] 

一定感覚で処理を実行させようと思っています。
<要件>
・通常は1秒もかからない処理(関数A)を連続で実行させるため、タイマ感覚は適当に5秒くらい。
・ただ、たまにデータ量が増えるため、5秒を過ぎる可能性も十分にある。
・その場合は処理を実行せずに、再度指定間隔後(5秒)に処理を実行する。
・ボタンを押すと、タイマは一時停止する。

そこで、タイマを使用しようと思っているのですが、Windowsタイマとスレッドタイマの違いがよくわかりません。
Windowsタイマだと、なんとなくCPU仕様率が上がる気がしたため、スレッドタイマを用いて以下のように
してみました。
スレッドタイマでやってみて思ったのは、常に指定間隔(5秒)で実行し、SyncLockの部分で処理が
順にたまっていっている気がします。溜まるのもよくないと思いフラグを設けましたが、何かスレッドタイマを
使うメリットが無いような気もします。。。
ちなみにですが、このように処理が溜まっていく過程が、スレッドプールというものなのでしょうか?


一応これで動いていますが、「タイマがまだ処理中だ」と判定する良い方法は無いでしょうか?
後、プログラムを終了させるとたまに「invoke」の部分でエラーが発生します。
こちらも回避したいのですが・・・
何かアドバイスをお願いします。


Imports System
Imports System.Threading

Public Class Form1
Public Delegate Sub setText1(ByVal s As String)

Private ReadOnly ResourceEntry As New Object

Private FlgEntry As Boolean = False

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
mainProcess()
End Sub

Private Sub mainProcess()
Dim Timer As New TimerCallback(AddressOf GetList)
Dim timer1 As New Timer(Timer, nothing, 100, 5000)
End Sub

Private Sub GetList(ByVal state As Object)
Dim dlg As New setText1(AddressOf insertText1)

If Not FlgEntry Then
SyncLock ResourceEntry
'処理中フラグON
FlgEntry = True

'ここで何かの処理。通常は1秒以下。たまに数秒。

Me.Invoke(dlg, New Object() {処理結果の文字列})


'ここで、別スレッドを起動して処理させる予定


'処理中フラグOFF
FlgEntry = False
End SyncLock
End If
End Sub

Private Sub insertText1(ByVal s As String)
TextBox1.AppendText(s)
End Sub

End Class

返信 編集キー/


管理者用

- Child Tree -