PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
17861 | 02/07/30 10:54:04 | RE(1):PB7.0: 3階層アプリケーションの非同期処理について By Taka |
17856 | 02/07/29 19:26:25 | PB7.0: 3階層アプリケーションの非同期処理について By min |
カテゴリ:スクリプトの記述
日付:2002年07月30日 10:54 発信者:Taka
題名:RE(1):PB7.0: 3階層アプリケーションの非同期処理について
minさん、こんにちは。
>サーバアプリケーション内の関数を
>クライアントから呼び出す時に
>非同期で実行させようと考えています。
やってますね。(^^
ここで「非同期」と言っても、実際には2通りの意味があると思います。
1) 関数やイベントをPOSTする
ソース上で呼び出したタイミングと、実際に実行されるタイミングをずらす方法です。
これも一種の非同期ではありますが、POSTされた処理が実行している間は、他の処理は
できません。(ウィンドウへの入力なども含めて)
これを回避するには、処理中に Yield() してイベント割り込みをさせ、一瞬だけ他の
処理を受け入れてあげる必要があります。でもこの方法が使えるのはループ処理の内側
ぐらいで、サーバと通信中などの場合には適用できません。
2) メインスレッドとは異なる別のスレッドを生成し、そちらで処理させる
いわゆるマルチスレッドプログラミングです。
別のスレッドであれば、異なる処理を並行して実行することができます。
PowerBuilderでこれをやるには、非表示クラスを「共有オブジェクト」としてインスタンス化します。
共有オブジェクトの中からサーバのリモート関数を呼び出すようにすれば、実行中でもメインスレッド
側のウィンドウがロックすることはありません。
minさんがやりたいことは、この方法で出来ると思いますが、メインスレッドが開放されていることに
よる問題も発生しやすくなるので、実装には細心の注意を払って下さい。
実際、マルチスレッドプログラミングでは、こういった面での「落とし穴」が結構あったりします。
あと、共有オブジェクトの中からメインスレッド側に何かを通知したい場合、ビジュアルオブジェクト
への参照を直接扱うことはできません。これをやるには、メインスレッドとの橋渡し役をするための
非表示オブジェクトを用意し、結果通知などはそれ経由で行ないます。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS Oracle SQL*Net 8
Browser Netscape4.X
Server SoftWare
OS Windows NT 4.0
DBMS Oracle 8.0
WebServer IIS
Copyright © 2013 Power Future Co., Ltd.