イベントを発生させないようにするには?


生茶  2005-06-09 23:58:18  No: 122382

たびたび申し訳御座いません。
VB6.0、XPにおきまして、
現在Winsockコントロールを使用した通信プログラムを作成しております。

一つのフォームに対し、二つのWinsockコントロールを配置、
各々sckSS(クライアントPC用),sckTT(メインフレーム用)と名前を付けてます。

そこで、
sckSSのDataArrivalイベント中は、sckTTのDataArrivalイベントをコネクト
切断せずに発生させないようにしたいのですが、何か良い方法は御座いま
すでしょうか?

一つの構造体定義を使用しており、sckSSの処理がsckTTの処理に上書きさ
れてしまう事を防ぎたいのです。


0123  2005-06-10 01:00:04  No: 122383

(案1)
sckSS_DataArrivalイベントプロシージャ中にDoEvents等のシステムに処理を返すようなステートメントを入れない。
システムに処理を返さない限り、DataArrivalイベントプロシージャ内で別のイベントが割り込むことはありません。

(案2)
フラグにより制御をコントロールする
sckSS_DataArrivalイベントプロシージャ内にてデータ処理中フラグ(フラグ1)を立て
sckTT_DataArrivalイベントプロシージャが呼ばれたときフラグ1をチェックし
フラグが立っていたらデータのみをバイト配列等に保存しのこりの処理をスキップする。
そして処理をせずデータを受信したことを記憶するフラグ2をたてる。
sckSS_DataArrivalイベントプロシージャを抜けるときにフラグ2をチェックし
未処理のデータがあればsckTT_DataArrival内で行うべき処理を実行する

ご参考までに


生茶  2005-06-10 01:52:23  No: 122384

0123様
ご回答有難う御座います。

Do Eventsにて割り込み発生を助長していた事に気づかされました・・・
案1及び案2を参考にし、再設計を実施したいと思います。

そこで、
改めまして確認したいのですが、
Do Events等のステートメントを取り除いた場合、
sckSS_DataArrivalイベント中にメインフレームからデータが投げられた時、
sckTT_DataArrivalイベントは”発生待ち”状態になり、
sckSS_DataArrivalイベント終了後に正常に動作するのでしょうか?

度々申し訳御座いませんが、宜しくお願い致します。


通ってみた  2005-06-10 03:30:28  No: 122385

実行すればわかるのでは?


ひろ  2005-06-10 18:55:06  No: 122386

無理して変な実装をする必要があるときは設計自体が
間違っている可能性を疑いましょう。

> 一つの構造体定義を使用しており、sckSSの処理がsckTTの処理に上書きさ
> れてしまう事を防ぎたいのです。

この作り方が悪いのでは?
何故同じ物を使わなければならないのですか?
きちんと分離すればいいのでは?


生茶  2005-06-10 20:47:18  No: 122387

通ってみた様
ひろ様

  ご指摘有難う御座います。おっしゃる通りです。

空想のもと質問しておりました事をここで陳謝致します。

少し前にDo EventsにてSocket通信の折返し待ちを実装するアプリ開発
を経験しており、今般の開発において、sckSS_DataArrivalイベント中
にsckTT_DataArrivalイベントの割り込みが発生するのではと一人混同
しておりました。

まだ実際に確認は取れておりませんが、イベント制御中の割り込みは
存在しない事を知りましたので、ご指摘のあった構造体についても分離の
必要はないと考えております。(同じデータフォーマットの構造体を2つ
用意することに違和感があり、また構造体の初期化及び編集等の処理も
二重化する必要があり、資源の観点で懸念を感じるからです。)

割り込みなし及び次イベント(sckTT_DataArrivalの"発生待ち"⇒"実行")
を確認したのち、解決とさせて頂きます。

ご指摘有難う御座いました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加