Winsorkであるデータが送られてきて
処理をしている最中に
データが数回送られてきた時
そのデータの2回分は、
処理後続けて処理されるのですが
その他のデータは、消えてしまいます
データを保持する方法
ないでしょうか?
環境は、VB6.0SP6 WIN2000 です
「消えてしまいます」ではなくて「消している」んですよ。
あなたが作成したデータ取得処理の不具合です。
もう一度、設計を考え直してください。
どんな風に作ったか分からないので指摘のしようもありません。
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
処理1(リモートIPとGETDATAのデータを使う)
IF 条件 then 処理2(リモートIPとGETDATAのデータを使う)
End Sub
Winsock_DataArrivalでアクション受けて処理をします
しかし、処理2の処理時間に約2分かかるときが有り
その間に来たデータを保持したいのですが
例えば、処理2の間に20回データが送られてきた時など
やり方は色々あるけれどDataArrivalの中で
Do
Winsock1.GetData str
'処理
Loop While str <> ""
こんなか
Do
Winsock1.GetData str
If str = "" Then
Exit Do
End If
'処理
Loop
こんなことをしたらいかがですか。
ねろさん返信有難うございます
'処理
の処理中に
Sendされるデータが
数回来ます
'処理の処理時間が長い(約2分)
その間に(次に)
str = ""やWinsock1.BytesReceived=O
になってしまいます
確認ですが
>str = ""やWinsock1.BytesReceived=O
になる前にWinsockのエラーイベントは発生していますか?
10060
"タイムアウトのため接続できませんでした"
と出ています
その送られて来るデーターは大きいものですか?
それと、2分かかる処理の中に少なくても1秒に1回位
DoEventsは入れることが可能ですか?
2分かかる処理は、
EXCELにデータを貼り付ける処理です
DoEvents
が効くのでしょうか?
テストで単純にListenを開始してData_Arrivalの中で無限ループになる
ようなものを作ってみましたが、タイムアウトのエラーはでませんね。
そのエラーが再現する最小限のコードは提示できますか?
時間がかかるのが問題であれば、通信専用のアプリケーションと
エクセルにデータを貼り付けるアプリケーションを別々に作っておいて
通信専用アプリケーションはデータを受信したらファイルに書き出すなり
共有メモリに書き出すだけにしておき、もう一方のアプリケーションで
データが蓄積されたらエクセルに書き込こむという作りにしたらどうでしょう。
データーを始めに全部受け取ってから、
EXCELにデータを貼り付けるのでは、いけないんですか?
質問と直接関係無いですが、
>2分かかる処理は、
>EXCELにデータを貼り付ける処理です
↓過去ログ検索『Resize』で引っ掛かります。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200408/04080085.txt
既に使っておられる、もしくは応用できないデータの
形・状況であればゴメンナサイ。
…仕事で帳票作成とかデータ貼り付けてグラフ表示とか
やってるけど、2分も掛かった記憶が無いので…そっち
で改良できそうな部分がある場合は別スレッド立てて
下されば答えます。
特攻隊長まるるう さん
有難うございました
>2分かかる処理は、
>EXCELにデータを貼り付ける処理です
一秒ですむようになりました
あと Winsock_DataArrivalの方確認してみます
EXCELにデータを貼り付ける処理です
一秒ですむようになり
"タイムアウトのため接続できませんでした"
のエラーはでなくなりましたが
1回分の保持はできるのですが
2回に移る時には、
str = ""やWinsock1.BytesReceived=Oになってします
処理中に来たデータは、一回分しか保持できないのでしょうか?
ツイート | ![]() |