
現在system.timers.timerを使用しています。
仕様としては、タイムアウト内に電文がこなければ再送するというものです。
Timerの使い方はわかったのですが、その途中で電文受信のイベントを走らすことって無理なのでしょうか?
今、わからないのはタイムアウトになるのを待ってから受信イベントが走っているので、
どうにかタイマーが動いている時でも中止して受信イベントを走らせたいです。
何か方法はありますか?
また、どういうふうにした方がいいとかあれば教えてください。
わかりにくい説明になったと思いますがよろしくお願いします。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
Dim rcvBytes As Byte() = udp.Receive(remoteEP)
を直接呼ばず、タイマをもう一個用意して、タイマイベントで実行するようにしたらどうかな?
この回答への補足
すみません・・・。
初心者なものでどうしたら良いのかちょっとわからないです。
ご迷惑おかけします。
下記のページを見つけました。
でも、実際どうしたら良いか・・・って感じで調べてみます・・・。
http://www.users.gr.jp/ml/archive/viewer.aspx?na …
No.4
- 回答日時:
ここが参考になりませんか?
この回答への補足
お返事ありがとうございます!
URLを参照したんですが、
Dim rcvBytes As Byte() = udp.Receive(remoteEP)
のときに待機状態になるので、作業ができなくなると思うんです。
No.3
- 回答日時:
すいません、レスがあるのを知りませんでした。
遅れましたが書いておきます
------------------------------------------------------------------
※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はわかりません。
どうしたら良いか知っていたら教えて下さい!
No.2
- 回答日時:
以前サンプルを載せた者です。
>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
これでわかるでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA横データを縦にしたいです
-
VBAでの一時停止と再開の方法
-
UWSCに制限時間を付けたいです
-
テキストボックスの名前に変数...
-
C言語でファクト関数を使わずに...
-
xmplayの使い方
-
ループフリー
-
Do whileでExitせず、ループの...
-
csh foreachで「*」でエラ...
-
CやJAVa,Rubyなどプログラミン...
-
GIFアニメをループさせたくない
-
CSVファイルの特定の行だけを読...
-
エクセルの当番表を作っていま...
-
C#で別のフォームのprogress ba...
-
vb.netからエクセル関数書き込み
-
Excel VBAでIf 条件式 then か...
-
Dim flag(4) as boolean で配列...
-
Strawberry Perl for Windows ...
-
エクセルVBAでTransposeの不思議
-
マクロ Publicでの配列定義
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
VBAでの一時停止と再開の方法
-
Escキーを押すと、中断する時と...
-
乱数の桁数指定、または範囲指定。
-
イベントの発生を待つ
-
流れ図(フローチャート)が分か...
-
UWSCに制限時間を付けたいです
-
vb.netです。2次元配列の要素を...
-
VBA for i=1 to lastrow
-
DoEventsが必要な理由について
-
ループフリー
-
VBA Boxが空白の場合のメッセー...
-
VBA ニュースタイトル取得
-
エクセルの当番表を作っていま...
-
Javaの質問です。 この問題の答...
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
おすすめ情報