(57)【要約】  ルーチン内のスレッドを切り替える技術および技法を開示する。コントローラールーチンは、コルーチンを実行する要求を元のルーチンから受信して、そして最初のスレッドのコルーチンを実行する。コントローラールーチンは、コルーチンがｒｅｔｕｒｎステートメントに基づいて終了をすると、コルーチンからのレスポンスバックを受信する。リターンにより、コルーチンは、コルーチンを次回に実行するときにコルーチンを実行するべきである後続のスレッドを示す。コントローラールーチンは、次回、後続のスレッド上においてコルーチンを実行する。コルーチンは、ｒｅｔｕｒｎステートメントに続くコードの行において実行をする。複数のｒｅｔｕｒｎステートメントをコルーチンに含むことができて、スレッドを、上記と同一のアプローチを用いて、複数回、切り替えることができる。グラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックを、ただ１つのルーチンにコミングルすることができる。
2011501323.tif 000002
【特許請求の範囲】
【請求項１】
コンピューターに、
コルーチンを実行する要求を元のルーチンから受信する手順（２０６）と、
最初のスレッド上のコルーチンを実行する手順（２０８）と、
コルーチンがｒｅｔｕｒｎステートメントに基づいてリターンをするとコルーチンからのレスポンスバックを受信する手順（２１０）と、
リターンによりコルーチンが示した後続のスレッド上のコルーチンを次回に実行する手順（２１２）と
を実行させるコンピューター実行可能な命令を有するコンピューター読み取り可能な媒体。
【請求項２】
もっとも近くのリターンにおいてコルーチンにより示されたもっとも近くの後続のスレッド上のコルーチンを実行するたびごとに、コルーチンの終了に到達するまで複数回コルーチンを実行する手順（２５０）
を実行させるコンピューター実行可能な命令をさらに有することを特徴とする請求項１に記載のコンピューター読み取り可能な媒体。
【請求項３】
前記後続のスレッドは、パラメーターとしてｒｅｔｕｒｎステートメントに含まれる（２４６）ことを特徴とする請求項１に記載のコンピューター読み取り可能な媒体。
【請求項４】
前記後続のスレッドは、ワーカー・スレッド・ロジックを処理するために使用される（２９６）ことを特徴とする請求項１に記載のコンピューター読み取り可能な媒体。
【請求項５】
ルーチンを部分的に終えてスレッドを切り替える方法であって、
第一のスレッド上のルーチンの実行を開始するステップ（２７２）と、
第一のｒｅｔｕｒｎステートメントにより前記ルーチンを部分的に終えてポイントでの前記ルーチンの終了をさせるステップ（２７４）であって、前記第一のｒｅｔｕｒｎステートメントが後続のスレッドの識別子を有する、終了をさせるステップと、
前記後続のスレッドの識別子において指定された後続のスレッド上におけるルーチンのコードの実行を再開するステップ（２７６）と、
前記第一のｒｅｔｕｒｎステートメントに続くコードの行での前記ルーチンにおけるコードの実行の続きをするステップ（２７８）と
を備えた方法。
【請求項６】
前記第一のスレッドと前記後続のスレッドとのうちの少なくとも１つは、グラフィカル・ユーザー・インターフェース・ロジックを処理するために使用されるスレッドである（２９２）ことを特徴とする請求項５に記載の方法。
【請求項７】
前記第一のスレッドと前記後続のスレッドとのうちの少なくとも１つは、ワーカー・ロジックを処理するために使用されるワーカー・スレッドである（２９８）ことを特徴とする請求項５に記載の方法。
【請求項８】
前記ルーチンは、コルーチンである（２７２）ことを特徴とする請求項５に記載の方法。
【請求項９】
前記第一のスレッドは、第二のスレッドと異なる型の動作を処理するのに使用される（２９８）ことを特徴とする請求項８に記載の方法。
【請求項１０】
前記後続のスレッドの識別子は、パラメーターとして前記第一のｒｅｔｕｒｎステートメントに含まれる（２７４）ことを特徴とする請求項５に記載の方法。
【請求項１１】
前記ルーチンの終了に到達するまで複数回、前記終了をさせるステップと、前記再開するステップと、続きをするステップとを繰り返すステップ（２５０）
をさらに備えたことを特徴とする請求項５に記載の方法。
【請求項１２】
前記ルーチンに含まれるコードの第一の行は、前記第一のｒｅｔｕｒｎステートメントである（３４４）ことを特徴とする請求項５に記載の方法。
【請求項１３】
前記第一のｒｅｔｕｒｎステートメントは、前記ルーチンのコードをさらに処理する前に第一の所望の実行スレッドを前記後続のスレッドの識別子に指定できるように前記コードの第一の行に置かれる（３４４）ことを特徴とする請求項１２に記載の方法。
【請求項１４】
グラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックを、ただ１つのルーチンにコミングルする方法であって、
コルーチンに含まれる最初のロジックのコードの実行を開始するステップ（２９２）であって、前記最初のロジックがユーザー入力を受信するために第一のスレッド上に実行される、開始するステップと、
前記ユーザー入力を受信するステップ（２９４）と、
第二のスレッドに切り替えるために部分的に終えて前記コルーチンの終了をさせるステップ（２９６）であって、前記第二のスレッドが前記第一のスレッドと異なるスレッドである、終了をさせるステップと、
前記ユーザー入力に応答してワーカーを実行するために前記第二のスレッド上のコルーチンにおけるコードの実行を再開するステップ（２９８）と
を備えた方法。
【請求項１５】
前記終了をさせるステップは、ｒｅｔｕｒｎステートメントに到達すると実行される（２９６）ことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記ｒｅｔｕｒｎステートメントは、実行を再開するべき次のスレッドを指定するスレッドの識別子をパラメーターとして含む（２７４）ことを特徴とする請求項１５に記載の方法。
【請求項１７】
複数のｒｅｔｕｒｎステートメントが、スレッドの切り替えを行うべきときに示すルーチンに含まれる（１６）ことを特徴とする請求項１６に記載の方法。
【請求項１８】
前記コルーチンは、適したスレッド上のコルーチンの呼び出しを確実にするコントローラールーチンにより複数回呼び出しをされることを特徴とする請求項１４に記載の方法。
【請求項１９】
前記コントローラールーチンは、元のルーチンにより呼び出しをされる（１２）ことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記元のルーチンは、前記コルーチンの呼び出しをする要求を含む（１２）ことを特徴とする請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッドに関し、より詳細には、ルーチン内のスレッドを切り替える方法に関する。
【背景技術】
【０００２】
開発者は、１つまたは複数のソフトウェア開発プログラムを使用してソフトウェアアプリケーションを記述する。開発者は、ソフトウェアアプリケーションが要求される機能を実行するのに必要なソースコードを記述する。ユーザーインターフェースを有するソフトウェアアプリケーションは、エンドユーザーに対して仕上がったアプリケーションにおいてグラフィカルなメニューおよびオプションとの双方向のやり取りを可能にして、要求される結果を出す。一般に、ソースコードを、開発者が、ソフトウェアアプリケーション開発の間中、上記のユーザー入力を処理しそしてユーザー入力に応答してそれに適したワークを実行させるために、記述しなければならない。
【０００３】
例えば、仕上がった顧客サービスアプリケーションの場合、エンドユーザーは、与えられた顧客名に対して、顧客の全記録を検索する検索操作を選ぶことができることがある。そして、ソフトウェアアプリケーションは、その検索を処理して、データベースにアクセスして合致する記録を検出して、その結果をエンドユーザーに戻さなければならない。上記の検索をソフトウェアアプリケーションのユーザー・インターフェース・スレッド上において処理する場合、砂時計を処理の状態しだいに表示できるかまたは表示できない。例えば、ソフトウェアアプリケーションが完全にブロックされている場合、砂時計を表示できない。上記のブロックのシナリオの場合、画面に表示できるすべては、黒い矩形かまたはユーザー・インターフェース・スレッドがブロックされていることを意味する他の表示かである。ブロックされている期間中、ユーザーは、ユーザー・インターフェース・スレッドが検索の実行プログラムにすべて使用されるので、プログラムによりほかのどんなこともできない。
【０００４】
今日、技術が進歩したので、マルチスレッドアプリケーションおよびマルチプロセッサを使用できる。言い換えると、マルチスレッドの実行を、同時に開始でき、使用可能なときにはマルチプロセッサ上において開始できるときもある。例えば、１つのスレッドを、ユーザー入力を処理するのに使用できて、別のスレッドを、ワーカータスクを実行するのに使用できる。マルチスレッドアプリケーションを作成するために、開発者は、マルチスレッドを作成して管理する複雑なコードを記述するのに努力を必要とする。通常、ソースコードは、異なるスレッド間の引数を渡す機能を含む必要があり、多くの異なる位置にわたって非同期に実行できる。開発者は、別個のスレッドにより実行する必要があるワークに対して別個のルーチンを記述することが多い。複数のスレッドによる作業の複雑さのために、開発者は、複数のスレッドを不正確にまたは非効率に使用することがよくあり、または複数のスレッドを少しも使用さえせずにユーザーにめったに起こらないユーザー・インターフェース・ブロックにより罰金を科すことをまさに期待するかのようなことが普通に見られる。
【発明の概要】
【０００５】
ルーチン内のスレッドを切り替える種々の技術および技法を開示する。コントローラールーチンは、元のルーチンからコルーチンを実行する要求を受信して、最初のスレッド上においてコルーチンを実行する。コントローラールーチンは、コルーチンがｒｅｔｕｒｎステートメントに基づいて存在するときにコルーチンからのレスポンスバックを受信する。コルーチンは、コルーチンが実行される次の時間に実行するべきである次のスレッドを示す。コントローラールーチンは、あらかじめ示された次のスレッドについての次の時間にコルーチンを実行する。複数のｒｅｔｕｒｎステートメントをコルーチンに含むことができて、これらのステップを複数回繰り返してスレッドを切り替えることができる。
【０００６】
一実施例において、グラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックの実行を、ただ１つのコルーチンにコミングル（co-mingle）することができる。コードの実行は、ユーザー入力を受信する第１のスレッド上に実行される最初のロジックを含む、コルーチンに含まれる最初のロジックに対して始まる。次に、ユーザー入力を受信する。コルーチンは、第２のスレッドが第１のスレッドと異なるスレッドである状態において、第２のスレッドへの切り替えを終えて部分的に戻る。コードの実行は、第２のスレッド上のコルーチンを再開して、ユーザー入力に応答してワークを実行する。
【０００７】
この発明の概要は、発明を実施するための形態において以下にさらに説明する概念の選択を簡略化された形において導入するために与えられた。この発明の概要は、主張される主題の重要な構成または本質的な構成を識別することを意図されず、主張される主題の範囲を限定する目的として用いられることも意図されていない。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施形態に係るスレッド・スイッチング・システムの概観の図である。
【図２】本発明の一実施形態に係るコンピューターシステムの概観の図である。
【図３】本発明の一実施形態に係るスレッド・スイッチング・コントローラー・アプリケーションの概観の図である。
【図４】本発明の一実施形態に係る異なるスレッド上のコルーチンの実行を管理するコントローラールーチンを使用することに含まれたステージを例示する処理のフローチャートである。
【図５】本発明の一実施形態に係るルーチンを終えてスレッドを部分的に切り替えることに含まれたステージを例示する処理のフローチャートである。
【図６】本発明の一実施形態に係るグラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックに、ただ１つのルーチンへコミングルすることができるようにすることに含まれたステージを例示する処理のフローチャートである。
【図７】本発明の一実施形態に係るコントローラールーチンをどのように開始するかの例を示すユーザーインターフェースの形に結び付けられたOｎClickイベント用の例示的なソースコードを実例により説明する図である。
【図８】本発明の一実施形態に係る複数のスレッド上のコルーチンの実行を管理するコントローラールーチン用の例示的なソースコードを実例により説明する図である。
【図９】本発明の一実施形態に係るグラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックをただ１つのコルーチンにコミングルするコルーチン用の例示的なソースコードを実例により説明する図である。
【発明を実施するための形態】
【０００９】
本明細書において、技術および技法を、ただ１つのルーチン内のスレッド間の切り替えを可能にする技法としての一般的な文脈において説明できるが、技術および技法は、さらにこれらに加えて他の目的にかなう。一実施例において、本明細書において説明する技術および技法を、例えば本願発明の特許出願人の製品などのソフトウェア開発プログラム内の機能として、ソフトウェアアプリケーション用のソースコードを記述するのに使用されるあらゆる型のプログラムもしくはサービスから、またはマルチスレッドのソフトウェアアプリケーションを生成するかまたは管理するかに用いられる他のあらゆる型のプログラムもしくはサービスから実装できる。
【００１０】
一実施例において、コルーチンを、本明細書において説明する技術および技法のうちのいくつかまたはすべてにより用いて、シーケンシャルのようにそして通常の言語構文により引数を渡すだけでなく、ただ１つのルーチンに含まれるロジックを実行する複数のスレッド間を切り替えることを考慮するコードを、記述できるようにすることができる。言い換えると、本明細書において説明する技術および技法により、同一ルーチン内の異なるスレッド上に実行されるロジックの処理をコミングルするメカニズムを与える。本明細書において用いられる用語「コルーチン」は、関数、手順、またはコルーチン内にコロケートされる一組のコードステートメントを含みつつ、コントロールがコルーチンに入るときまたはコルーチンから出るときと無関係であるコルーチンの個別のアクティブ化レコードの有効期間によって、中断してそして後の時間において再開できる複数のエントリポイントを許す他のルーチンを含むことを意味する。
【００１１】
図１は、本発明の一実施形態に係るスレッド・スイッチング・システム１０の概観の図である。一実施例において、スレッド・スイッチング・システム１０は、元のルーチン１２、コントローラールーチン１４およびコルーチン１６を含む。本明細書において用いられる用語「ルーチン」は、関数、手順、ソースコードを構成単位にまとめる他のあらゆる方法を含むプログラムコンポーネントを含むことを意味する。元のルーチン１２は、例えばコルーチン１６など、与えられたコルーチンに含まれる機能を実行する必要があるあらゆるルーチンであるとすることができる。一実施例において、コルーチンの呼び出しをするために、元のルーチン１２は、コントローラールーチン１４を経由する。コントローラールーチン１４は、ルーチンがリターンされるとコルーチンにより示されたスレッド上のコルーチン１６を開始するたびごとに、複数回、コルーチン１６の呼び出しを繰り返す。本明細書において用いられる用語「ｒｅｔｕｒｎステートメント」は、コルーチンに、コルーチンの終了に到達する前にリターンをさせるステートメントまたは他のメカニズムを含むことを意味する。言い換えると、コルーチン１６がコードの中のより多くのあらゆる行を実行する前にスレッドを切り替える必要があるとき、ｒｅｔｕｒｎステートメントを使用することにより、異なるスレッドを使用して後に続くコードの中の行を処理できるようにルーチンから一時的にリターンをする。コルーチンが、リターンをすることにより後続のスレッドを示すことができる種々の方法がある。一実施例において、ｒｅｔｕｒｎステートメントは、次に使用されるべき別のスレッド用の、後続のスレッドの識別子を含むリターンパラメーターを含むことができる。後続のスレッドを示す他の種々の方法を、例えば、リターンをする前に後続のスレッドを設定するメソッドの呼び出しをするコルーチンによって、後続のスレッドの識別子によりオブジェクトのプロパティまたは値を設定することによって、後続のスレッドの識別子をデータベースに記憶させることによってなど、さらに使用できる。
【００１２】
そして、コルーチン１６は、ｒｅｔｕｒｎステートメントの次に続くコードの（１行または複数行あとの）行において、または別の適した位置から（別のスレッド上において）再開される。ステージを、コルーチン１６の終了に到達するまで、またはコントローラールーチン１４に、コルーチン１６の実行による繰り返しとスレッドの切り替えとを停止させる別のイベントが発生するまで、繰り返すことができる。一実施例において、コルーチン１６がコントローラールーチン１４により再開されるたびごとに、もっとも近くのリターンにおいてコルーチンから示されたもっとも近くの後続のスレッドを使用することにより、使用するスレッドを決定できる。
【００１３】
別の一実施例において、元のルーチン１２およびコントローラールーチン１４の機能を組み合わせて同一のルーチンにすることができることを補足すべきである。いくつかの実施例において、本明細書にて用いられる用語「ルーチン」は、コルーチンをさらに含むことができる。例えば、元のルーチン１２およびコントローラールーチン１４をルーチンとしてともに説明したが、いくつかの実施例において、元のルーチン１２およびコントローラールーチン１４のどちらかまたは両方を１つまたは複数のコルーチンとして実装できるだろう。図１の説明において紹介した上記の技法を、図３〜６においてより詳細に説明しそして図７〜９においてソースコードの例により説明するものである。
【００１４】
さて、図２を参照して、スレッド・スイッチング・システムの１つまたは複数のパーツを実装するのに使用され、例えばコンピューティングデバイス１００などのコンピューティングデバイスを含む例示的なコンピューターシステムを説明する。コンピューターシステムの最も基本的な構成において、通常、コンピューティングデバイス１００は、少なくとも１つの処理ユニット１０２およびメモリ１０４を含む。コンピューティングデバイスの正確な構成および型しだいにより、メモリ１０４は、揮発性（例えばＲＡＭなど）、不揮発性（例えば、ＲＯＭ、フラッシュメモリなど）、またはこれら２つの組み合わせであるとすることができる。上記の最も基本的な構成を、図２において破線１０６により例示する。
【００１５】
加えて、コンピューティングデバイス１００は、追加の機能／ファンクションをさらに有することができる。例えば、コンピューティングデバイス１００は、制限されないが、磁気もしくは光学のディスクまたはテープを含む（固定および／または取外し可能の）追加の記憶装置をさらに含むことができる。上記の追加のストレージを、図２において取外し可能な記憶装置１０８および固定の記憶装置１１０により例示する。コンピューター記憶媒体は、例えばコンピューター読み取り可能な命令、データ構造、プログラムモジュールもしくは他のデータなどの情報を記憶するためのあらゆる方法または技術において実装される、揮発性および不揮発性、取外し可能および固定の媒体を含む。メモリ１０４、取外し可能な記憶装置１０８および固定の記憶装置１１０は、すべてコンピューター記憶媒体の例である。コンピューター記憶媒体は、制限されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（digital versatile disk）もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または望みの情報を格納するのに使用できるとともにコンピューティングデバイス１００がアクセスできる他のあらゆる媒体を含む。上記のあらゆるコンピューター記憶媒体は、コンピューティングデバイス１００の一部であるとすることができる。
【００１６】
コンピューティングデバイス１００は、コンピューティングデバイス１００に他のコンピューター／アプリケーション１１５と通信することを可能にする１つまたは複数の通信接続１１４を含む。コンピューティングデバイス１００は、例えば、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなど、（複数の）入力デバイスをさらに含むことができる。例えば、ディスプレイ、スピーカー、プリンターなど、（複数の）出力デバイスを、さらに含むことができる。上記のデバイスは、当技術分野においてよく知られており、上記のデバイスを、詳細に説明する必要はない。一実施例において、コンピューティングデバイス１００は、スレッド・スイッチング・コントローラー・アプリケーション２００を含む。スレッド・スイッチング・コントローラー・アプリケーション２００を、図３においてさらに詳細に説明するものである。
【００１７】
図３を参照して、図２の参照を続けつつ、コンピューティングデバイス１００上において動作するスレッド・スイッチング・コントローラー・アプリケーション２００を説明する。スレッド・スイッチング・コントローラー・アプリケーション２００は、コンピューティングデバイス１００上に備わっているアプリケーションプログラムの１つである。しかしながら、スレッド・スイッチング・コントローラー・アプリケーション２００を、１つまたは複数のコンピューター上の、および／または図２に示されたのと異なるバリエーションにおけるコンピューター実行可能な命令として、代わりにまたは加えて組み立てることができる。代わりにまたは加えて、スレッド・スイッチング・コントローラー・アプリケーション２００の１つまたは複数のパーツは、システムメモリ１０４の一部であると、他のコンピューターおよび／またはアプリケーション１１５上にあると、またはコンピューターソフトウェアの当業者が気づくだろう他の上記のバリエーションであるとすることができる。
【００１８】
スレッド・スイッチング・コントローラー・アプリケーション２００は、プログラムロジック２０４を含み、本明細書において説明する技術のいくつかまたはすべてを確実に実行する。プログラムロジック２０４は、コルーチンを実行する要求を元のルーチンから受信する（図４に関して下に説明するような）ロジック２０６、最初のスレッド上のコルーチンを実行する（図４に関して下に説明するような）ロジック２０８、コルーチンがリターンをするとコルーチンからのレスポンスバックを受信する（図４に関して下に説明するような）ロジック２１０、コルーチンがリターンをしたときに示された後続のスレッド上のコルーチンを実行する（図４に関して下に説明するような）ロジック２１２、グラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックの実行を、ただ１つのルーチンにコミングル（co-mingle）することができる（図６に関して下に説明するような）ロジック２１４、およびスレッド・スイッチング・コントローラー・アプリケーション２００を動作させる他のロジック２２０を含む。
【００１９】
図４〜６を参照して、図１〜３の参照を続けつつ、（図１の）スレッド・スイッチング・システム１０および／または（図３の）スレッド・スイッチング・コントローラー・アプリケーション２００についての１つまたは複数の実施例を実装するステージを、さらに詳細に説明する。いくつかの実施例において、図４〜６の処理を、コンピューティングデバイス１００の動作ロジックにおいて少なくとも部分的に実装する。
【００２０】
図４は、異なるスレッド上のコルーチンの実行を管理するコントローラールーチンを使用することに含まれたステージの一実施例を例示する処理のフローチャートである。一般に、図４は、ｒｅｔｕｒｎステートメントに基づいてコルーチンがリターンをするときに指定されたスレッド上のコルーチンの呼び出しをするたびごとに、複数回、コントローラールーチンにコルーチンの呼び出しをさせることに含まれる例示的な処理を示す。
【００２１】
コルーチンを実行する要求を元のルーチンからの受信する（ステージ２４２）と、コントローラールーチンは、最初のスレッド上のコルーチンを実行する（ステージ２４４）。一実施例において、望みのスレッドへの切り替えを開始する、コルーチンにおけるコードの行にいく前に、最初のスレッドは、単に、スレッドが別に指定されないときにソフトウェアアプリケーションにより使用されるデフォルトのスレッドであるだろう。次に、コルーチンが一定のロジックを実行して、コントローラールーチンがｒｅｔｕｒｎステートメントに基づいてコルーチンからのレスポンスバックを受信する（ステージ２４６）。終了により、コルーチンは、コントローラールーチンがコルーチンに呼び出しをする次回にどのスレッドがコルーチンの呼び出しをするべきかを指定する後続のスレッドの識別子を示した。一実施例において、ｒｅｔｕｒｎステートメントによるコルーチンから受信されたレスポンスバックは、後続のスレッドの識別子付きのパラメーターを含む。別の実施例において、コントローラールーチンは、オブジェクトに、データベースに、またはコルーチンがリターンをされたときに後続のスレッドの識別子に割り当てられた他の変数の値にアクセスする。
【００２２】
そして、コントローラールーチンは、コルーチンがリターンをされたときに示された（後続のスレッドの識別子に示された）スレッド上において次回にコルーチンを実行する（ステージ２４８）。コルーチンがコルーチンの終了に到達する前に（別のｒｅｔｕｒｎステートメントのために）再度リターンをする場合（判断ポイント２５０）、コントローラールーチンは、コルーチンから別のレスポンスバックを受信してそしてコルーチンが呼び出しをされる次回にコルーチンを開始する次の後続のスレッドの指示を有するだろう（ステージ２４６）。そして、コントローラールーチンは、次の後続のスレッド上のコルーチンを再び実行するだろう（ステージ２４８）。ひとたびコルーチンの終了に到達する（判断ポイント２５０）と、コントローラールーチンは、コルーチンの呼び出しを停止する（ステージ２５２）。
【００２３】
図５は、ルーチンを終えてスレッドを部分的に切り替えることに含まれたステージの一実施例を例示する処理のフローチャートである。ルーチンを、１つのスレッド上において開始する（ステージ２７２）。一実施例において、ルーチンは、コルーチンである。別の実施例において、ルーチンは、複数回、呼び出しができつつ、先の実行が停止したときにコードのポイントにおいて開始される実行を使用できるあらゆる型のルーチンである。ルーチンのコードの１つまたは複数の行の実行後に、ルーチンは、ｒｅｔｕｒｎステートメントにいき、ｒｅｔｕｒｎステートメントにいくことによって、ルーチンに、ルーチンの中のすべてのコードを部分的にのみ終えてポイントのリターンをさせる（ステージ２７４）。リターンをすることによって、ルーチンは、後続のスレッドの識別子を示す（ステージ２７４）。例えば、ルーチン自体のｒｅｔｕｒｎステートメントのリターンパラメーターにおいて、値を設定するオブジェクトもしくは型のプロパティかフィールドかを設定することによって、値を設定するメソッドの呼び出しをすることによって、後続のスレッドの識別子をデータベースに書込むことによって、後続のスレッドの識別子をコントローラールーチンに伝達する他のあらゆる手段によってなど、ルーチンが後続のスレッドの識別子を示すことができる種々の方法がある。次に、ルーチンの実行を、後続のスレッドの識別子において指定されたスレッド上において再開する（ステージ２７６）。コードの実行を、後続のスレッド上の今回に、リターン前の前回の続きをする（ステージ２７８）。
【００２４】
図６は、グラフィカル・ユーザー・インターフェース・スレッド・ロジックおよびワーカー・スレッド・ロジックに、ただ１つのルーチンへコミングルすることができるようにすることに含まれたステージの一実施例を説明する処理のフローチャートである。コルーチンを、ユーザー入力を受信するために第１のスレッド上において開始する（ステージ２９２）。次に、ユーザー入力を受信する（ステージ２９４）。コルーチンは、第２のスレッドが第１のスレッドと異なった状態において、第２のスレッドに切り替えるために部分的に終えてリターンをする（ステージ２９６）。一実施例において、コルーチンは、ｒｅｔｕｒｎステートメントにいくために、リターンをする。コードの実行を、ユーザー入力に応答してワークを行うために第２のスレッド上のコルーチンにおいて再開する（ステージ２９８）。一実施例において、第１のスレッドがグラフィカル・ユーザー・インターフェース・スレッドでありつつ、第２のスレッドがワーカー・スレッドである。グラフィカル・ユーザー・インターフェース・スレッドおよび／もしくはワーカー・スレッドの代わりにまたはグラフィカル・ユーザー・インターフェース・スレッドおよび／もしくはワーカー・スレッドに加えて、種々の組み合わせが可能である。図９は、グラフィカル・ユーザー・インターフェース・スレッド・ロジックおよびワーカー・スレッド・ロジックをただ１つのルーチンへコミングルすることについての例示的なソースコードを示す。
【００２５】
さて、図７〜９を参照して、例示的なソースコードを説明して、図４〜６のステージをさらに詳細に説明するものである。図７から始めると、ユーザーインターフェースの形に結びつくＯｎＣｌｉｃｋイベント３１２用の例示的なソースコード３１０を示す。ＯｎＣｌｉｃｋイベント３１２（図１の元のルーチン１２）は、エンドユーザーがフォーム上のＢｅｔｔｅｒＢｕｔｔｕｎのボタンをクリックすると始まる。次に、ＯｎＣｌｉｃｋイベント３１２は、コントローラールーチン（図１のコントローラールーチン１４）の呼び出しをして、それは示した例における実行メソッド３１４である。一実施例において、コントローラールーチンにより実行される必要があるコルーチン名を、パラメーターとしてコルーチンルーチンへ元のルーチンから渡す。次に、コントローラールーチンは、図８に示すような、適したスレッド上のコルーチンの呼び出しを、複数回、確実にする。コルーチンへの呼び出しがループ３２４内にさらに含まれて、それはコルーチンの呼び出しを、複数回、確実にする。コルーチンの呼び出しをするたびごとに、コントローラールーチンは、コルーチンがリターンをしたときに先に指定したスレッド上のコルーチンを開始する。
【００２６】
図９に示すように、コルーチンは、ただ１つのコルーチンにミックスされる異なる型のスレッド上に実行するよう指定されたコードを含むことができる。図９の例示的なソースコード３３０において、グラフィカル・ユーザー・インターフェース・ロジック（３３６、３４４）およびワーカー・スレッド・ロジック（３４０）がただ１つのルーチンにともにコミングルされて、それは図９の例におけるｂｅｔｔｅｒＢｕｔｔｕｎ１＿Ｃｌｉｃｋｅｄルーチン３３２である。スレッド間を切り替えるために、ｒｅｔｕｒｎステートメント（３３４、３３８、３４２）を使用する。上記の例において、ＧＵＩスレッドおよびワーカー・スレッドを、ワークの別個の部分を実行するために使用する。さらにその上、上記の例において、ｒｅｔｕｒｎステートメントは、（Ｃ＃プログラミング言語の）ｙｉｅｌｄステートメントである。各ｒｅｔｕｒｎステートメント（３３４、３３８、３４２）は、コルーチンを、一時的にリターンをして、そしてｒｅｔｕｒｎステートメントにパラメーター（例えば、ＧＵＩスレッドに対して「ＴｈｒｅａｄＲｅｑｕｅｓｔ．ＵＩ」、またはワーカー・スレッドに対して「ＴｈｒｅａｄＲｅｑｕｅｓｔ．Ｗｏｒｋｅｒ」）として指定されたスレッドにおいて再開するべきであることを信号送信する。図８に示したコントローラールーチンがコルーチンからリターンレスポンスを受信すると、次に、コルーチンの実行を、指定されたスレッド上においてのみ、コントローラールーチンによって再び開始する。
【００２７】
主題を、構造的機能および／または方法論的動作に特定の言語において説明したが、添付の特許請求の範囲において定義される主題は、上に説明した特定の機能または動作に必ずしも制限されない。むしろ、上に説明した特定の機能または動作を、クレームを実装する形の例として開示する。本明細書において説明したようにおよび／または添付の特許請求の範囲よって実施例の精神の範囲内にあるすべての等価、変更および修正を、保護することを望む。
【００２８】
例えば、当コンピューターソフトウェア分野の事業者は、本明細書において説明された実施例を、実施例において表現されたよりもより少ないもしくはより多くのオプションまたは機能を含む１つまたは複数のコンピューターに、異なって構成できることを承知するであろう。
【図１】
2011501323.tif 000003
【図２】
2011501323.tif 000004
【図３】
2011501323.tif 000005
【図４】
2011501323.tif 000006
【図５】
2011501323.tif 000007
【図６】
2011501323.tif 000008
【図７】
2011501323.tif 000009
【図８】
2011501323.tif 000010
【図９】
2011501323.tif 000011
【国際調査報告】
2011501323.tif 000012
2011501323.tif 000013