- - PR -
VB6の非同期の通信
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2006-12-26 21:20
VB6.0 だとその server に接続しにいく method が非同期で無い限り無理だと思います。
| ||||
|
投稿日時: 2006-12-27 00:12
method を非同期にするのはどうすればよいのでしょうか・・。
基本的なことですいません。。 | ||||
|
投稿日時: 2006-12-27 22:56
え〜と。基本的かどうかはともかくとして。 具体的にどういう処理を行っているんですか? そしてどのように実装しているんですか? おそらく、その部分はあらかじめ用意されている API を通じてやっていると思われますが、それが非同期で実行されるようにできていないとダメでしょうということです。 もし、非同期でその処理を行う method があらかじめ用意されていなければ、C言語とか使って非同期でその処理を行う method を持つ dll を自作するとかしないとだめでしょうねということです。 | ||||
|
投稿日時: 2006-12-28 00:56
こんばんは。
まず ・「サーバ」とは何の(どんなサービスを提供する)サーバーなのか? ・メソッドとは、具体的にどのオブジェクトのなんというメソッドなのか? を明記したほうが、はやく解決にたどり着けるように思います。
VB6で同期メソッドを非同期メソッドにすることは、(おそらく)無理です。 Winsockコントロールのような、 非同期メソッドをサポートし、完了時にイベントをあげてくれるようなActiveXコントロールを作成するには、 マルチスレッドに対応していないVB6だけでは通常無理です。VC++などで作ってやる必要があります。 #私はかなり前に組み込み制御系の開発で、 非同期メソッドだらけのActiveXコントロール(いわゆる「OLE for Retail POS」というやつ)を いっぱい作らされたことがあります。 | ||||
|
投稿日時: 2006-12-28 09:50
通信だけ別のVBアプリに任せて親のアプリからキックする…というのを考えました。
通信終わったら親アプリにSendKeys、一定時間内に返答がない場合は…あ、TerminateProcessしかないかな。 | ||||
|
投稿日時: 2006-12-28 10:41
古い記事ですが、参考になりますでしょうか?
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/0008/com/ | ||||
|
投稿日時: 2006-12-28 10:56
こんにちは。
そういえば別プロセスで処理させるという方法がありますね… mioさん、masimaさんの書き込みで、気づきました..orz masimaさんの「ローカルCOMサーバー」を作成するという方法が、 良さそうな気がします。 |
1