dポイントプレゼントキャンペーン実施中!

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

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

何か方法はありますか?
また、どういうふうにした方がいいとかあれば教えてください。
わかりにくい説明になったと思いますがよろしくお願いします。

A 回答 (7件)

うーむTT


徹夜明けです。

すいません。できておりませんT▽T

結構むずいっすね。

また来週チャレンジです。。
    • good
    • 0
この回答へのお礼

忙しいところすみません。
いつでも良いのでお願いします。

お礼日時:2005/04/04 20:15

すいません。



現在、業務中にこっそりやっているのですが、ちょっと、かかりそうなので、週末に調べてみますね。
m(_ _)m

この回答への補足

ご迷惑をおかけしてすみません。

補足日時:2005/03/31 14:25
    • good
    • 0

Dim rcvBytes As Byte() = udp.Receive(remoteEP)


を直接呼ばず、タイマをもう一個用意して、タイマイベントで実行するようにしたらどうかな?

この回答への補足

すみません・・・。
初心者なものでどうしたら良いのかちょっとわからないです。
ご迷惑おかけします。

下記のページを見つけました。
でも、実際どうしたら良いか・・・って感じで調べてみます・・・。

http://www.users.gr.jp/ml/archive/viewer.aspx?na …

補足日時:2005/03/31 09:27
    • good
    • 0

http://dobon.net/vb/dotnet/internet/udpclient.html
ここが参考になりませんか?

この回答への補足

お返事ありがとうございます!

URLを参照したんですが、
Dim rcvBytes As Byte() = udp.Receive(remoteEP)
のときに待機状態になるので、作業ができなくなると思うんです。

補足日時:2005/03/30 15:42
    • good
    • 0

すいません、レスがあるのを知りませんでした。


遅れましたが書いておきます

------------------------------------------------------------------
※TimerEventの変更箇所
------------------------------------------------------------------

TimerEvent関数をステータスを返すように変更

Public Sub TimerEvent(ByVal sender As Object, ByVal interval As Integer)

Public Function TimerEvent(ByVal sender As Object, ByVal interval As Integer) as boolean


内部のループ内で、受信を行う


Do
  Windows.Forms.Application.DoEvents()
  If Not Status = TimerStatus.timRun Then
    TimeOutFlgA = True
    Exit Do
  End If

  'ここで受信チェック
  'If 受信ステータス が正常 Then
    TimerEvent = True
  'End If
Loop



------------------------------------------------------------------
※OutouMachiの変更箇所
------------------------------------------------------------------

Do While TimeOutFlgA
  If TimerEvent(Me, ini.TimeOut) Then
    '正常終了
    'さらにループ抜け
  Else
    'タイムアウトカウントを1増やす
    TMaxCnt += 1
  End If

  If ini.MaxCount = TMaxCnt Then
    TimeOutFlgA = False
    Return
  End If
Loop

この回答への補足

たくさん書いていただきありがとうございます!
ひとつわからないことがあるのですが、UDPで通信している場合、受信ステータスのチェックってできるでしょうか?
TCPだったらわかったのですが、UDPはわかりません。
どうしたら良いか知っていたら教えて下さい!

補足日時:2005/03/30 13:14
    • good
    • 0

以前サンプルを載せた者です。



>Timerの使い方はわかったのですが、その途中で電文受信のイベントを走らすことって無理なのでしょうか?

以前のサンプルそのまんまで、判定処理を通るはずなのですが、、、
DO~LOOPを使用していますか?
ループ内で、タイムアウト判定を行っていますか?
ループ内に、判定処理を入れてますか?
DO~LOOPがタイマイベント内のコードになっていませんよね?

もし、以前のサンプルと作りが違うのであれば、現在どうなっているかが想像できません。
現在のコードを公開した方が、解決が早いと思います。

この回答への補足

お返事ありがとうございます。

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

これでわかるでしょうか?

補足日時:2005/03/25 09:55
    • good
    • 0

Timerを正しく使っていれば、他のイベントが走るはずです。


Timerのイベント処理で何を行っているのでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!