- PR -

VB6の非同期の通信

1
投稿者投稿内容
shin
会議室デビュー日: 2004/10/05
投稿数: 16
投稿日時: 2006-12-26 21:12
現在、下記のような実装をしています。
AA_timerで一定間隔でサーバ接続をすると同時に、
サーバ接続開始時にBB_timerを開始し、一定時間に返答がない場合は、画面に999を表示するという
処理をしたいのですが、サーバから返答がない場合、画面がハングしていまいます。
どのようにしたら、したいことができるでしょうか・・。
基本的なことで申し訳ありあませんが、どなたかご教授願います。

Private Sub AA_timer()

Dim nRet As Integer

BB_timer.Enable = True
nRet = サーバ接続

BB_timer.Enable = False
   
   AA.Caption = nRet

End Sub

Private Sub BB_timer()
   
   AA.Caption = 999

End Sub
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-12-26 21:20
VB6.0 だとその server に接続しにいく method が非同期で無い限り無理だと思います。
shin
会議室デビュー日: 2004/10/05
投稿数: 16
投稿日時: 2006-12-27 00:12
method を非同期にするのはどうすればよいのでしょうか・・。
基本的なことですいません。。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-12-27 22:56
引用:

shinさんの書き込み (2006-12-27 00:12) より:
method を非同期にするのはどうすればよいのでしょうか・・。
基本的なことですいません。。



え〜と。基本的かどうかはともかくとして。
具体的にどういう処理を行っているんですか?
そしてどのように実装しているんですか?

おそらく、その部分はあらかじめ用意されている API を通じてやっていると思われますが、それが非同期で実行されるようにできていないとダメでしょうということです。

もし、非同期でその処理を行う method があらかじめ用意されていなければ、C言語とか使って非同期でその処理を行う method を持つ dll を自作するとかしないとだめでしょうねということです。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2006-12-28 00:56
こんばんは。

まず
・「サーバ」とは何の(どんなサービスを提供する)サーバーなのか?
・メソッドとは、具体的にどのオブジェクトのなんというメソッドなのか?
 を明記したほうが、はやく解決にたどり着けるように思います。

引用:

shinさんの書き込み (2006-12-27 00:12) より:
method を非同期にするのはどうすればよいのでしょうか・・。
基本的なことですいません。。



VB6で同期メソッドを非同期メソッドにすることは、(おそらく)無理です。

Winsockコントロールのような、
非同期メソッドをサポートし、完了時にイベントをあげてくれるようなActiveXコントロールを作成するには、
マルチスレッドに対応していないVB6だけでは通常無理です。VC++などで作ってやる必要があります。

#私はかなり前に組み込み制御系の開発で、
 非同期メソッドだらけのActiveXコントロール(いわゆる「OLE for Retail POS」というやつ)を
 いっぱい作らされたことがあります。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-12-28 09:50
通信だけ別のVBアプリに任せて親のアプリからキックする…というのを考えました。
通信終わったら親アプリにSendKeys、一定時間内に返答がない場合は…あ、TerminateProcessしかないかな。
masima
会議室デビュー日: 2003/08/05
投稿数: 7
投稿日時: 2006-12-28 10:41
古い記事ですが、参考になりますでしょうか?

http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/0008/com/
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2006-12-28 10:56
こんにちは。

引用:

Tdnr_Symの書き込み (2006-12-28 00:56) より:
VB6で同期メソッドを非同期メソッドにすることは、(おそらく)無理です。



そういえば別プロセスで処理させるという方法がありますね…
mioさん、masimaさんの書き込みで、気づきました..orz

masimaさんの「ローカルCOMサーバー」を作成するという方法が、
良さそうな気がします。
1

スキルアップ/キャリアアップ(JOB@IT)