(57)【要約】  プロセッサ及び少なくとも幾らかのメモリを各々含んでいるコンピューティング装置を１つ以上実行する２つ以上のプログラムスレッド間においてデータを交換する方法である。前記方法は、前記プログラムスレッドの第１のプログラムスレッドがこれらプログラムスレッド間の関係を規定するための契約上のソフトウェアコンポーネントを実施するステップと、前記第１のプログラムスレッド及び１つ以上の第２のプログラムスレッドが前記契約上のソフトウェアコンポーネントの規定される関係に基づいて、個々の契約上のソフトウェアオブジェクトを各々作成するステップと、を有する。【特許請求の範囲】
【請求項１】
プロセッサ及び少なくとも幾らかメモリを各々含んでいる１つ以上のコンピューティングデバイスにおいて実行する２つ以上のプログラムスレッド間においてデータを交換するための方法において、前記方法は、
−前記プログラムスレッドのうちの第１のプログラムスレッドが前記プログラムスレッド間の関係を規定するための契約上のソフトウェアコンポーネントを実施するステップ、及び
−前記第１のプログラムスレッド及び１つ以上の第２のプログラムスレッドが前記契約上のソフトウェアコンポーネントの規定される関係に基づいて個々の契約上のソフトウェアオブジェクトを各々作成するステップ
を有する方法。
【請求項２】
前記プログラムスレッド間における前記規定される関係は、前記契約上のソフトウェアコンポーネントのインスタンス化である請求項１に記載の方法。
【請求項３】
プログラムスレッド毎に対し契約上のソフトウェアオブジェクトが作成される請求項１に記載の方法。
【請求項４】
契約上のソフトウェアオブジェクトは、前記契約上のソフトウェアオブジェクトを作成し、且つ操作するのに必要な手段を割り当てることによりデータを交換する方法を用いて、各スレッドに対し作成される請求項１に記載の方法。
【請求項５】
前記契約上のソフトウェアオブジェクト及び前記プログラムスレッド間における前記関係は、単一の論理オブジェクトである請求項１に記載の方法。
【請求項６】
プログラムスレッドは、第２のプログラムスレッドの第２の契約上のソフトウェアオブジェクトを用いて前記第２のプログラムスレッドとデータを通信するための第１の契約上のソフトウェアオブジェクトにおいて局部的に動作する請求項１に記載の方法。
【請求項７】
前記単一の論理オブジェクトの前記第１の契約上のソフトウェアオブジェクトにおける局部的な動作は、前記第１の契約上のソフトウェアオブジェクトのコミット動作後に、全体的となる請求項１に記載の方法。
【請求項８】
前記単一の論理オブジェクトの前記第１の契約上のソフトウェアオブジェクトの全体的動作は、前記第２の契約上のソフトウェアオブジェクトにより同期動作を呼び出すことにより第２の契約上のソフトウェアオブジェクトにおいて効果を得る請求項１に記載の方法。
【請求項９】
情報を交換する必要がある少なくとも２つの協働するプログラムスレッドを実行する少なくとも１つのプロセッサ及び１つのメモリを備えるコンピューティングデバイスを少なくとも１つ有する、請求項１による方法を実施するためのコンピュータシステム。
【請求項１０】
請求項１に記載の方法をプロセッサに行わせるように構成されるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
コンピューティングデバイスは、コンピュータ及び通信ネットワークの利用が増大することによりますます相互に接続されるようになってきている。さらに、例えばオーディオ及びビデオ器具、家庭用（携帯）電話等のようなデバイスは、ソフトウェアを実行するためのコンピューティング手段をますます有している。これらの機器も通信ネットワークに接続される傾向がある。ソフトウェアが同じ装置において実行する又は通信ネットワークを介して他の装置において実行する、他のソフトウェアと通信することを可能にするために、ソフトウェアが通信する方法を規定しなければならない。上記通信を規定する多くの方法が過去に考案されていた。このような様々なソフトウェアの通信方法の理由は、ソフトウェアを実行する上記様々な機器が多くの産業から生み出されているからである。
【背景技術】
【０００２】
コンピューティングの産業内においてさえ、ソフトウェア間を通信する数多くの方法が開発されている。例えば家庭用機器、電気通信等の他のような上述の産業による機器もソフトウェア通信の方法の独自の歴史を持っていることを考慮すると、機器間を通信するためのワーキングシステムを作成するために、多くの特別な解決策が開発されてきたことは驚くことではない。この開発の結果は、従来の器具に用いられる２つ以上のソフトウェアコンポーネントが適切に通信することが可能なことは疑わしいことである。このソフトウェアの問題を克服するために、２つ以上のソフトウェアコンポーネントが相互に通信することが必要なときにパッチが作成される。このような特別なパッチを開発することは非常にコストがかかってしまう。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記欠点を克服するために、本発明は、プロセッサ及び少なくとも幾らかのメモリを各々含む１つ以上のコンピューティングデバイスにおいて実行する２つ以上のプログラムスレッド間においてデータを交換するための方法を提供する。前記方法は、
−前記プログラムスレッドのうちの第１のプログラムスレッドが前記プログラムスレッド間の関係を規定するための契約上のソフトウェアコンポーネントを実施するステップ、及び
−前記第１のプログラムスレッド及び１つ以上の第２のプログラムスレッドは、前記契約上のソフトウェアコンポーネントの前記規定される関係に基づいて、個々の契約上のソフトウェアオブジェクトを夫々作成するステップ
を有する。
【課題を解決するための手段】
【０００４】
前記契約上のソフトウェアオブジェクト（共通クライアンツ）は、前記関係（初期の共通オブジェクト）と一緒に１つ以上の装置に存在してもよく、単一の論理エンティティとして動作してもよい。これの利点は、上記コンポーネントの使用がソフトウェアに標準的ネットワーキング及び／又は通信技術に加えて高いレベルで通信するのを可能にすることである。これの第２の利点は、ソフトウェアが互いに通信するために、存在するネットワーク及びネットワークソフトウェアは、ソフトウェアの分散型の共通オブジェクト(co-object)が機能的に動作しているのに加えて使用されるのが可能なことである。
【０００５】
本発明の他の利点は、全プログラムスレッドに対し同様に働く上記分散型コンポーネントを用いてソフトウェアが通信を行うために、通信することを可能にすべきスレッドに対する特別なコードをもはやプログラムする必要はないことである。ある役割(role)が選択された後、前記分散型コンポーネントは役割の機能に従い動作する。このことは図の説明の際にさらに説明を行う。
【０００６】
さらに、本発明はネットワークトラフィックを制御（ラウンドトリップ制御）する体系化された方法を提供する。この方法を使用する場合、分散型ソフトウェアコンポーネントの実施は、特別なインタフェースを採用することを必要とせずに、ネットワークの待ち時間及び分散の程度に依存して最適化され得る。ネットワークへの前記コンポーネントの分散の実施を最適化するために、ネットワークトポロジが考慮され得る一方、インタフェース調節は必要無い。
【０００７】
この方法の他の利点は、分散型コンポーネントの動作がこのコンポーネントの分散の程度とは無関係なことである。パフォーマンスレベルにおいて常に異なっていたとしても、本発明による方法を用いることが、プログラムスレッド間に通信が実施される方法の完全な予測を可能にする。
【０００８】
本発明の好ましい実施例において、前記スレッド間で規定される関係は、契約上のソフトウェアコンポーネントのインスタンス化（初期の共通オブジェクト）である。１つ以上の契約上のソフトウェアオブジェクト（共通クライアンツ）は全体としてスレッド間で規定される関係（の組）（共通コンポーネント）と共に、共通クライアンツ(co-clients)を作成するためのプログラムスレッドにより使用されるソフトウェアコンポーネントである。この関係は共通クライアントをプログラムスレッドのプログラム空間又はドメインにおいて実行される共通クライアンツとしてどのように作成しなければならないかを規定している。
【０００９】
本発明のさらに好ましい実施例において、プログラムスレッド毎に対し、契約上のソフトウェアオブジェクト（共通クライアント）は、前記共通クライアンツを作成及び操作させるのに必要な手段を割り当てることによりデータを交換する上述される方法を用いて作成される。
【００１０】
初期の共通オブジェクトは、他のプログラムスレッドとデータの交換を行うための共通オブジェクトを利用するために、プログラムスレッドが同意しなければならない契約上の条件を規定したものである。契約は役割を特定する。プログラムスレッドが上記役割を使用する必要がある場合、プログラムスレッドはこの役割に“署名(sign)”することができる。役割は、“権利”及び“義務”の意味も含む。これら権利及び義務は共通クライアントを作成及び動作させるための手段の割り当てを有する。
【００１１】
プログラムスレッドは共通クライアンツを使用するための手段を残さなければならない。このために残されるべき手段の仕様は、初期の共通オブジェクトにおいて共通オブジェクトごとに配置される。プログラムスレッドが分散型ソフトウェアコンポーネントを使用する必要がある場合、プログラムスレッドは、クライアントが署名した役割の仕様に従い共通クライアントが作成される効果を持ついわゆる契約に同意するであろう。
【００１２】
本発明の好ましい実施例において、分散型共通オブジェクトは単一の論理オブジェクトである。
【００１３】
さらに、プログラムスレッドは、第２のプログラムスレッドの第２の契約上のソフトウェアオブジェクトを用いてデータを第２のプログラムスレッドと通信するための第１の契約上のソフトウェアオブジェクト上において局部的に動作させることが好ましい。これの利点は、共通クライアントがスレッド内において局部的に実行するので、１つのスレッドが他のスレッドと通信するために、共通クライアントと共に内部動作を実行することだけが必要なことである。前記スレッドが前記共通クライアントと通信すべきデータを内部伝達した後、分散型オブジェクトは“コミット(commit)”後の他のスレッドとのデータの通信を引き受ける。このことは後の図の説明において説明される。
【００１４】
前記単一の論理オブジェクトの前記第１の契約上のソフトウェアオブジェクトにおける局部的動作(local operation)は、前記第１の共通クライアントのコミット操作後に、全体的動作(global operation)となる。共通クライアントが前記内部動作までにホストスレッドからデータを入力した場合、このデータは依然として局部的に記憶されている。前記通信を入力することを必要とする他のスレッド内において実行する共通クライアントであるターゲット共通クライアンツがデータを入力するために、第１の共通クライアントがコミット動作を行わなければならない。共通クライアントが一部をなす共通オブジェクトにより実行されるこの操作により、ターゲット共通クライアンツは、これら共通クライアンツがデータを入力するであろうことを知らされる。利点は、共通クライアンツを有する共通オブジェクトが単一の論理オブジェクトを形成するので、全体的操作は、他のクライアンツにより理解可能な方式で共通オブジェクトにより実施されることである。
【００１５】
前記単一の論理オブジェクトの前記第１の契約上のソフトウェアオブジェクトの全体的動作は、第２の契約上のソフトウェアオブジェクトにより同期動作を呼び出すことより第２の契約上のソフトウェアオブジェクトに影響を与えることが好ましい。これの利点は、前記第１の共通クライアントのコミット動作後、全体的となる前記データが第２の共通クライアントが実行しているプログラムスレッドにおいて局部的となるであろう。今後、通信が向けられた第２のスレッドは内部動作により前記データへアクセスすることが可能である。通信を受ける側においても同期動作は共通オブジェクトの操作であることは明らかであり、これはデータを入力するスレッドがデータへアクセスするために全体的操作を行う必要がないことを意味している。この入力スレッドは単に共通クライアントにおいて局部的操作を行う必要があるだけである。
【００１６】
本出願と同一の出願人による米国特許番号6,182,152号（出願人整理番号PHN15645）は、イントラプロセス更新操作及び協働するシーケンシャルプロセスを同期させるためのインタープロセス適合動作の使用を開示している。この文献において、 “チャンネル(channel)”を用いて相互に接続されるプロセッサに対する同期方法が開示されている。これらの“チャンネル”は、３つの部分、送信者に対し局部的である部分、受信者に対し局部的である部分及び全体的である部分からなる。この文献において、“コミット”操作は全ての係属中のプロセスの更新を自動的に実行する。“ＳＹＮＣ２”動作は全ての係属中の適合動作を実行する。この文献による方法は、全てのプロセッサが同じ機器の一部であり、共有メモリを使用する場合に実行され得る。
【００１７】
他の好ましい実施例は、少なくとも１つのプロセッサと、情報を交換する必要がある少なくとも２つの並列して作用するプログラムスレッド(concurring program thread)を実行する１つのメモリとを少なくとも１つのコンピューティングデバイスを有する、本発明による方法を実行するためのコンピュータシステムに供給する。
【００１８】
同じく係属中のヨーロッパ特許出願番号01204140.6号（出願人整理番号PHNL010784）において、分散型コンポーネントの分散の程度とは無関係なコンピューテイションの一貫性を可能にする通信プロトコルが開示されている。順序一貫性(sequential consistency)を保証する上記方法を利用することは、協働するプロセッサに通信時の遅延とは無関係に機能することを可能にさせる。
【００１９】
本発明の他の利点、特徴及び詳細は、好ましい実施例の図を示す添付図面を参照して、本発明の好ましい実施例の以下の説明に見るように説明される。
【発明を実施するための最良の形態】
【００２０】
本発明による共通オブジェクトは、矩形１０として表される。この共通オブジェクト１０は、１つの初期の共通オブジェクト５と４つの共通クライアンツ１１、１２、１３、１４とを有する。初期の共通オブジェクト５は、プログラムスレッドから作成されるように、呼び出し時にソフトウェアコンポーネント６により作成される。共通クライアントは、コンピューティング装置（図示せず）において実行するソフトウェアであるプログラムスレッドが少なくとも１つの他のプログラムスレッドとデータを交換する必要がある場合、共通オブジェクト１０の論理部分として作成される。
【００２１】
共通オブジェクトは論理エンティティであり、ここにおいて個々のプログラムスレッド（プロセッサ）１、２、３、４において実行する共通クライアンツが作成される。共通オブジェクト及び共通クライアンツは、スレッドが個々のプロセス内においてデータを共通クライアンツに受け渡すようにして、スレッド間におけるデータの通信を可能にする。送信プロセスにおけるある共通クライアントから受信プロセスにおける他の共通クライアントへ、すなわちプロセス１における共通クライアントからプロセス２における共通クライアントへの実際のデータの送信は、送信プロセスの範囲外で行われ、これにより共通オブジェクトにより扱われる。共通オブジェクトは、全体的なレベルにおいてデータの送信に関する全ての動作に責任を持つ。
【００２２】
プロセス１が他のプロセス２へ情報を送信する必要がある場合、プロセスは共通オブジェクトを用いて共通クライアントを作成する。共通クライアントを作成することを可能にするために、このプロセスはこれを行う方法に関する初期の共通オブジェクトからデータを読み取る必要がある。この初期の共通オブジェクトは、リソースの種類に関する情報を有し、処理容量は、共通クライアントを動作するために取っておかれる必要がある。この情報に基づいて、プロセスは共通クライアントを作成することができる。これにより作成される共通クライアントは、プロセス１のリソース内において実行し、論理上、共通オブジェクトの一部となる。プロセス２においても、共通クライアントは類似の方式で作成されるべきである。プロセスは行うべき一定の機能を必要とする。これら機能の組み合わせは役割と呼ばれる。これにより、初期の共通オブジェクト又は契約上のソフトウェアコンポーネントのインスタンス化から読み取られるべきデータは、前記プロセスに前記役割を遂行することが可能な共通クライアントを作成することを可能にする。
【００２３】
共通のコンポーネントは、共通オブジェクトの特定のクラスの実施を含むＣＯＭコンポーネントとして具現化され得るソフトウェアコンポーネントである。共通オブジェクトは、前記クラスのオブジェクトと同じやり方で初期の共通オブジェクトを作成することにより作成される。これは、ＣＯＭが用いられる場合、”CoCreateInstance”を用いて行われる。実際には、共通オブジェクトは契約とみなされ、これは、クライアンツが契約において規定され、クライアンツは権利を得るがこの役割に関連する義務を得ることを意味する特定の役割に対し動的に署名することを意味する。
【００２４】
これにより、ＣＯＭコンポーネントは前記役割及び関連する権利並びに義務を特定する適切な仕様を持つ必要がある。この仕様は、前記役割と関連する幾つかのインタフェースを特定する。ＣＯＭに関し、前記仕様が契約において、特定される各インタフェースを個別のＧＵＩＤ(Globally Unique IDに与える代わりに、コントラクトＩＤと呼ばれるＧＵＩＤ)により特定されることが好ましい。
【００２５】
共通コンポーネントの実施例は、“イベント仲介者(Event Mediator)”である。このイベント仲介者の共通オブジェクトは、イベントソース(Event Source)及びイベントシンク(Event sink)を動的に接続及び切断するための設備を備える。通常は、幾つかのイベントソース及びイベントシンクは、同じ機械上に存在する一方、残りは異なる機械に配置される。
【００２６】
３つの異なる役割は、イベント仲介者に対し識別される。“イベント送信者(Event sender)”はイベントソースの所有者である。イベントの特定型式に対するイベントソースとしてイベント仲介者に接続及び切断することが可能である。接続の後、イベントの発生をイベント送信者にレポートできる。
【００２７】
“イベント受信者”は、“イベントシンク”の所有者である。イベントの特定型式に対するイベントシンクとしてイベント仲介者に接続及び切断することが可能である。接続している場合、イベント受信者はイベント型式に対するイベントハンドラ(Event Handler)を指定すべきである。この影響は、イベント送信者のソース部に起こるイベントが（送信者“コミット”及び受信者“同期”の条件で）イベント受信者のシンクに伝達する。第３の役割は、イベント仲介者に所与のイベント型式に対する記録されたソース及びシンクの数を照会（クエリー）する“イベントインクワイラ(Event Inquirer)”である。これは簡単な例であることに注意されたい。実際のイベント仲介者はさらに多くの特徴を持っていなければならないだろう。
【００２８】
初期の共通オブジェクト５は、コンポーネント技術又はプログラミング言語でオブジェクトを作成する標準的なやり方により本発明により作成される。共通オブジェクトは最初に“初期の共通オブジェクト”という名前を説明する初期の共通オブジェクトだけを有する。この初期の共通オブジェクトは、共通オブジェクトが存在するのと同じ長さ存在し続け、そのアイデンティティは共通オブジェクトのアイデンティティとして用いられる。前記オブジェクトは、プログラムスレッド又はプロセッサに特定の役割に対し署名することを可能にするインタフェース“ICoSign”8を少なくとも１つ有する。役割に対し署名することは、プロセス又はクライアントのドメインにおいて共通クライアントを作成する。共通オブジェクトは、この共通オブジェクトに特有の追加のインタフェースを持ってよい。
【００２９】
上述されるように、ICoSign8の目的は、共通オブジェクトの潜在的なクライアンツが特定の役割において共通オブジェクトと対話させることである。クライアントは、その役割に関連する全ての義務を果たさなければならないという意味を含む役割に対し署名しなければならない。見返りに、クライアントは前記共通オブジェクトからサービスを得る。これら役割は、役割ＩＤを用いて特定される。クライアントのドメインにおいて夫々署名及び共通クライアントを作成した後、共通クライアントへの参照はクライアントに戻る。署名操作の戻り値により示されるように、署名が失敗するかもしれない。例えば、１つのクライアントだけしか署名をしない役割であってもよい。ICoSign8は、役割に対する“サインアップ(signing up)”を支援するだけであり、“サインオフ(signing off)”は支援しない。これは、（共通オブジェクトにより表されるような）契約が解約（キャンセル）できないことを意味しているのではない。契約が解約され得る場合、これは、契約自身の一部として特定されるべきであり、共通クライアンツの役割専用のインタフェースにより支援されるべきである。さらに、共通クライアントは署名を行ったクライアントだけで使用すると意味される。共通クライアントの方法に呼び出すことは、共通オブジェクトによりクライアントから来ていると解釈され、これは共通クライアントがクライアントを特定するための共通オブジェクトにより用いられることを意味する。
【００３０】
共通クライアントは、標準的な対話型インタフェース３１、３２、３３、３４であるインタフェースの固定された組と、クライアントに関連する役割に特有のインタフェース２１、２２、２３、２４の集合とを備えるクライアント側のオブジェクトである。
【００３１】
特定の役割に対しサインアップを行う場合、クライアントはこの役割に対する共通クライアントのプライベートコピー(private copy)を得る。共通クライアントの役割専用のインタフェースは、役割に関連する機能性へのアクセスを供給する。これらの役割専用のインタフェースにより供給される操作の効果は、クライアントのプロセスドメインに対し厳密に局部化している。
【００３２】
共通クライアントにおける操作の局部的効果は、対話型インタフェースを介して共通オブジェクトにおける全体的効果となることができる。他のクライアンツによる共通オブジェクトにおける全体的効果も同様にこのインタフェースを介して共通クライアントにおける局部的効果となることができる。
【００３３】
共通オブジェクトにより支援される役割の組は、共通クライアントに関連するインタフェースの組と比べ、動的に変化してよいことに注意すべきである。
【００３４】
“クライアンツ”という用語は、プログラムスレッドである共通オブジェクトのユーザに対する一般的な用語である。これらは共通クライアントのインタフェースだけを介して共通オブジェクトと対話する。クライアントにより果たされる特定の役割に対する共通クライアントは、クライアントのプロセスドメインにおいて作成される。これは、クライアントと同じアドレス空間であることを意味する。
【００３５】
“クライアント”という用語は、実際にはプロセス、スレッド、オブジェクト、オブジェクトの集合等となり得る一般的概念である。
【００３６】
イベント受信者の共通クライアンツの役割が特定のインタフェースは、COM IDL;
IeventReceiverConnect
{ void connect ([in]
EventID    id
[in]
EventHandler hdl
);
void disconnect ([in]
EventID id);
}
を用いて特定されるような“IeventReceiverConnect”である。
【００３７】
このインタフェースは、イベントＩＤ及びイベントハンドラを特定することによりクライアントにイベント受信者として接続及び切断することを可能にする。接続動作の効果は、クライアントがイベントＩＤにより特定されるイベントの型式の受信者として登録される。このイベントの型式に対する送信者が登録されている場合、これらの送信者により発生する如何なるイベントも共通クライアントに伝達される。
【００３８】
イベントを扱うための動作に加え、イベントハンドラのインタフェースもクライアントの接続及び切断を扱うための２つの動作を供給することができる。その理由は、接続及び切断が非同期だからである。共通オブジェクトは、対応するイベントハンドラの動作を呼び出すことにより接続及び切断を確認する。
【００３９】
さらに、例えば接続及び切断動作のような他の全ての役割が特定の動作は、これら動作が共通オブジェクトレベルにおいて効果を持つ前に、コミットされる必要がある。
【００４０】
各共通クライアントにより供給される対話型インタフェースは、情報を交換するための共通オブジェクトを使用しているプログラムされたスレッド間においてネットワークトラフィックの密度を制御するための主要な手段である。共通クライアントにおいてクライアントによる役割が特定の動作の各々は、そのクライアントのプロセスドメインに厳密に局部化していて、如何なるネットワークトラフィックも含むことはない。これは本発明の大きな利点である。共通オブジェクトにおける動作の全体的効果は、共通クライアントの“コミット”動作がクライアントにより実施された後にのみもたらされる。まさに、この効果が何であるかは、共通オブジェクトの仕様から読み取られるべきである。
【００４１】
コミットすることは、共通オブジェクトにおいて全体的効果を持つが、この共通オブジェクトを使用する他のクライアンツの何れにおいても全体的効果は持たない。スレッドがデータを送信することによる他のスレッドへの影響を無しに、データがスレッドにより送信されることが可能なことは非常に有利である。他のクライアンツがコミット動作の効果を得るために、クライアントは、共通クライアントにおいて同期動作を呼び出さなければならず、これは共通クライアント（及びその共通クライアントだけ）に効果を生じさせる。本発明による方法の使用は、明確に規定される瞬間にだけ対話を行うことを可能にして、これがネットワークトラフィックを最適化する。
【００４２】
送信者が２つの型式のイベント“キーボードイベント”及び“マウスイベント”を送信する方法の実施例は、ＣＯＭ：
受信者によるアクション；
（１）eventReceiver.connect(keybdEventID,
eventHandler);
（２）eventReceiver.connect(mouseEventID,
eventHandler);
（３）commit ();
（４）... actions by sender ...
（５）sync ();
（６）- eventHandler.handleConnect (keybdEventID);
（７）- eventHandler.handleConnect (mouseEventID);
（８）- eventHandler.handleEvent (keybdEventID, shiftKey);
（９）- eventHandler.handleEvent (keybdEventID ctrlKey);
（１０）- eventHandler.handleEvent (keybdEventID, clickLeft);
を用いて特定されることができる。
【００４３】
初めに、送信者は共通クライアントの対応する“コネクト(connect)”動作“coEventSender”を呼び出すことにより、キーボード及びマウスイベントとして接続しなければならない。
【００４４】
“コミット”を呼び出すことにより、これら命令は、２つの型式のイベントの送信者としてクライアントに可能にする共通オブジェクトに伝達される。その瞬間から、共通オブジェクトは、これらの型式のイベントの受信者に、送信者により発生したこれら型式のイベントを送る。
【００４５】
送信者は３つのイベント“shiftKey”、“ctrlKey”、“clickLeft”を発生させる。“raiseEvent”動作は送信者のクライアントだけに局部的効果を持つ。“コミット”は、これらの動作の全体的効果を設ける。
【００４６】
他の実施例は、受信者がＣＯＭ：
送信者によるアクション：
（１）CoEventSender.connect (KeybdEventID);
（２）CoEventSender.connect (mouseEventID);
（３）commit ();
（４）...
（５）CoEventSender.raiseEvent (keybdEventID, shiftKey);
（６）CoEventSender.raiseEvent (keybdEventID, ctrlKey);
（７）CoEventSender.raiseEvent (keybdEventID, clickKey);
（８）commit ();
を用いて特定されるイベントを受信することができる方法を示している。
【００４７】
最初に、受信者はキーボード及びマウスイベントの受信者として接続しなければならない。“コミット”は、これら命令を全体的に通信するのに用いられる。
【００４８】
これら２つの動作に応答して、共通オブジェクトは、受信者に受け取り通知を送り、これは受信者に今後キーボード及びマウスイベントが届くことを予期することを知らせる。
【００４９】
上述したように、接続後すぐに送信者がイベントを発生する場合、受信者は“同期”を行った後、３つのイベント、２つの接続イベント、２つのキーボードイベント及び１つのマウスイベントを受信するであろう。これらイベントは、対応するイベントハンドラを呼び出すことにより、（“同期”の一部として）受信者側において発生する。
【００５０】
さらに、追加のインタフェースが加えられ得る。これらインタフェースは、共通クライアントの“IcoConnect”インタフェース及びクライアントの“IcoSignal”インタフェースと呼ばれる。
【００５１】
共通クライアントの“IcoConnect”インタフェースは、クライアントに、共通クライアントが“同期外れ(out of sync)”であることを報告する共通クライアントの通知に同意（“接続”）することを可能にする。このインタフェースに同意する場合、クライアントは、クライアントに同期外れイベントを“知らせる(signal)”ために、共通クライアントにより用いられる“IcoSignal”コールバックインタフェースを供給しなければならない。クライアントは共通クライアントから“切断(disconnecting)”することにより前記通知を止めることができる。
【００５２】
対話型操作は、個々の共通クライアント、個々の共通オブジェクトにおける共通クライアントの集合、又は共通オブジェクトの集合における共通クライアント及び／若しくは全ての共通オブジェクトにおける全ての共通クライアントのようなプロセス内の共通クライアントの組に規定されることができる。例えば個々の共通クライアントにおける“コミット”及び“同期”のような基本の対話型動作は、同じ共通オブジェクトの共通クライアントの集合、異なる共通クライアントによる共通クライアントの集合又はあるプロセスドメインにおける全ての共通クライアントにおいて操作するさらに大まかな対話型動作に結合される。
【００５３】
プロセスにおける全ての共通クライアンツにおいて動作する他の対話型動作は、“コミット(commit)”、“同期(sync)”、“待機(wait)”、“ネクスト(next)”及び“待ち(await)（条件付け(condition)）”を有する。これらは、プロセスレベル、すなわちプロセスにおける全ての共通クライアンツにおいて同時に動作する複合対話型演算子の実施例である。“コミット”演算子は、全ての共通クライアンツにおいて“コミット”を行う（実際には“ペンディング(pending)”“コミット”しか実施しない）。“同期”演算子は、同期外れである全ての共通クライアントにおいて“同期”を行う。“待機”演算子は、共通クライアントが同期外れとなるまで待たされる。“ネクスト”演算子は“同期”に続く“コミット”を行う。“待ち（Ｃ）”は、条件Ｃが真になるまで待たされる。
【００５４】
共通クライアント及び共通オブジェクトが同じプロセス又は同じ機械に存在する場合、“コミット”−“同期”機構における共有メモリの実施は、共通クライアンツ間の通信が共通オブジェクトを通過する必要がないのではなくショートカットされるときに、使用され得る。最初に特定の役割に対しサインアップを行うことは、共通クライアントコードをダウンロードすることを通常は意味している。
【図１】
2005509216.tif 000002
【国際調査報告】
2005509216.tif 000003