たびたび申し訳御座いません。
VB6.0、XPにおきまして、
現在Winsockコントロールを使用した通信プログラムを作成しております。
一つのフォームに対し、二つのWinsockコントロールを配置、
各々sckSS(クライアントPC用),sckTT(メインフレーム用)と名前を付けてます。
そこで、
sckSSのDataArrivalイベント中は、sckTTのDataArrivalイベントをコネクト
切断せずに発生させないようにしたいのですが、何か良い方法は御座いま
すでしょうか?
一つの構造体定義を使用しており、sckSSの処理がsckTTの処理に上書きさ
れてしまう事を防ぎたいのです。
(案1)
sckSS_DataArrivalイベントプロシージャ中にDoEvents等のシステムに処理を返すようなステートメントを入れない。
システムに処理を返さない限り、DataArrivalイベントプロシージャ内で別のイベントが割り込むことはありません。
(案2)
フラグにより制御をコントロールする
sckSS_DataArrivalイベントプロシージャ内にてデータ処理中フラグ(フラグ1)を立て
sckTT_DataArrivalイベントプロシージャが呼ばれたときフラグ1をチェックし
フラグが立っていたらデータのみをバイト配列等に保存しのこりの処理をスキップする。
そして処理をせずデータを受信したことを記憶するフラグ2をたてる。
sckSS_DataArrivalイベントプロシージャを抜けるときにフラグ2をチェックし
未処理のデータがあればsckTT_DataArrival内で行うべき処理を実行する
ご参考までに
0123様
ご回答有難う御座います。
Do Eventsにて割り込み発生を助長していた事に気づかされました・・・
案1及び案2を参考にし、再設計を実施したいと思います。
そこで、
改めまして確認したいのですが、
Do Events等のステートメントを取り除いた場合、
sckSS_DataArrivalイベント中にメインフレームからデータが投げられた時、
sckTT_DataArrivalイベントは”発生待ち”状態になり、
sckSS_DataArrivalイベント終了後に正常に動作するのでしょうか?
度々申し訳御座いませんが、宜しくお願い致します。
実行すればわかるのでは?
無理して変な実装をする必要があるときは設計自体が
間違っている可能性を疑いましょう。
> 一つの構造体定義を使用しており、sckSSの処理がsckTTの処理に上書きさ
> れてしまう事を防ぎたいのです。
この作り方が悪いのでは?
何故同じ物を使わなければならないのですか?
きちんと分離すればいいのでは?
通ってみた様
ひろ様
ご指摘有難う御座います。おっしゃる通りです。
空想のもと質問しておりました事をここで陳謝致します。
少し前にDo EventsにてSocket通信の折返し待ちを実装するアプリ開発
を経験しており、今般の開発において、sckSS_DataArrivalイベント中
にsckTT_DataArrivalイベントの割り込みが発生するのではと一人混同
しておりました。
まだ実際に確認は取れておりませんが、イベント制御中の割り込みは
存在しない事を知りましたので、ご指摘のあった構造体についても分離の
必要はないと考えております。(同じデータフォーマットの構造体を2つ
用意することに違和感があり、また構造体の初期化及び編集等の処理も
二重化する必要があり、資源の観点で懸念を感じるからです。)
割り込みなし及び次イベント(sckTT_DataArrivalの"発生待ち"⇒"実行")
を確認したのち、解決とさせて頂きます。
ご指摘有難う御座いました。
ツイート | ![]() |