2

サーバーが自分自身をCORBAネーミングサービスにバインドするのを待ちたいです。まず、ネーミングサービスをポーリングしている次のコードを使用しようとしました

Object expectedObj = null;
do
{
   try { expectedObj = ncRef.resolve_str("expectedToBeInNameService"); } 
   catch (NotFound e) {}
   Thread.sleep(2000);
} while(expectedObj == null;

私の最大の問題は、このブロッキングです。それがノンブロッキングになるのを待つ最も簡単な方法は何ですか?

4

1 に答える 1

0

別のスレッドで待機し、コールバックを使用して、ネーミングサービスへの要求が解決されたことを「元の」スレッドまたはオブジェクトに通知できます。

class WaitThread extends Thread {
    CallBackObj callback;

    public WaitThread(CallBackObj callback) {
      this.text = callback;
      // assume CORBA stuff initiated here
    }

    public void run() {
      Object expectedObj = null;
      do
      {
         try { expectedObj = ncRef.resolve_str("expectedToBeInNameService"); } 
         catch (NotFound e) {}
         Thread.sleep(2000);
      } while(expectedObj == null;
      callback.notifyMethodExample();
    }
  }

呼び出し元は、インターフェイスCallBackObjを実装する必要があり、次の方法でこのスレッドを作成します。

WaitThread wt = new WaitThread(this);
wt.start();


interface CallBackObj {
 void notifyMethodExample();

}
于 2012-10-05T20:38:49.043 に答える