- PR -

VB .Netのタイマーについて

1
投稿者投稿内容
ゆっき
常連さん
会議室デビュー日: 2005/03/29
投稿数: 20
投稿日時: 2005-03-29 20:01
Public Class ClsDa01

 Public TimeOutFlgA As Boolean
 Private TMaxCnt As Integer

 ''応答電文待ち Timer開始
 Private Sub OutouMachi()
   Dim ini As New IniData
   Dim cls As New ClsUDP

   TimeOutFlgA = True
   ini = cls.GetIniData

   Try
     Do While TimeOutFlgA
       Call TimerEvent(Me, ini.TimeOut)
       ''リトライ
       TMaxCnt += 1
       If ini.MaxCount = TMaxCnt Then
         TimeOutFlgA = False
         Return
       End If
     Loop
   Catch ex As Exception
     Return
   End Try
 End Sub

 ''Timer開始
 Public Sub TimerEvent(ByVal sender As Object, ByVal interval As Integer)

   Call TimerStart(interval)
   TimeOutFlgA = False
 
   Do
     Windows.Forms.Application.DoEvents()
     If Not Status = TimerStatus.timRun Then
       TimeOutFlgA = True
       Exit Do
     End If
   Loop
 End Sub
End Class

現在system.timers.timerを使用しています。
仕様としては、タイムアウト内に電文がこなければ再送するというものです。
Timerの使い方はわかったのですが、その途中で電文受信のイベントを走らすことって無理なのでしょうか?

今、わからないのはタイムアウトになるのを待ってから受信イベントが走っているので、
どうにかタイマーが動いている時でも中止して受信イベントを走らせたいです。

何か方法はありますか?
また、どういうふうにした方がいいとかあれば教えてください。
わかりにくい説明になったと思いますがよろしくお願いします。
チキン
会議室デビュー日: 2005/03/15
投稿数: 11
投稿日時: 2005-03-30 06:21
近くにThreadがあるので、返答0も気の毒と思い、レスします。
Timerを同期処理で待つ以上、うまい方法は同じThread(Windowsのです)内では無い様に思います。もうひとつの処理を同じThreadでするのではなくて、別のThreadを使うマルチシュレッド処理をすれば、不安定な状態がなく、処理できます。Threadを新たに作ること自体は、Invoke命令でSubRoutineを呼べば簡単ですが、そのSubRoutineの中で、FormのControlにアクセスするのは、別に、Formを所有する元のThreadに依頼しないといけないという注意事項があります。Unixなどで、マルチシュレッドの経験があればそんなに難しくありませんが。全く初めてなら、抵抗があるかもしれません、この辺がレスがない理由かもしれません。ヒントとしてください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-03-30 07:40
引用:

ゆっきさんの書き込み (2005-03-29 20:01) より:
       Call TimerEvent(Me, ini.TimeOut)


これです。

引用:

現在system.timers.timerを使用しています。
仕様としては、タイムアウト内に電文がこなければ再送するというものです。
Timerの使い方はわかったのですが、その途中で電文受信のイベントを走らすことって無理なのでしょうか?

今、わからないのはタイムアウトになるのを待ってから受信イベントが走っているので、
どうにかタイマーが動いている時でも中止して受信イベントを走らせたいです。


 Alertだったか、時間がきたらメソッドを実行する、ってのが無かったですか?

 っつうか、これだとTimerになってないし。。。
_________________
1

スキルアップ/キャリアアップ(JOB@IT)