非同期プログラミング ライブラリの使用
マルチデバイス アプリケーションでの RTL の使用 への移動
RTL では、非同期 プログラミング ライブラリ(APL)を提供しています。APL は、PPL を利用して、TComponent 内での非同期操作をサポートします。もともとマルチスレッド操作を使用して非同期のアプリケーションの管理を手動でカスタマイズすることはできましたが、その作業が APL によって大幅に楽になりました。コンポーネントに非同期プログラミングのサポートが組み込まれたためです。
APL の概要
APL には、非同期呼び出しをサポートするための基底クラス TBaseAsyncResult があります。このクラスにより、アプリケーションの非同期部分の管理が簡素化されます。
- メモ: 何も行わなければ、デフォルトで、呼び出しはメイン スレッドで同期的に実行されます。
対象メソッドがバックグラウンド スレッドで実行されている間、元の呼び出し側スレッドは、通常どおり、他の同期タスクを並列で実行し続けることができます。対象メソッドでのタスクの処理が完了すると、結果が呼び出し側スレッドに返されます。
メモ: 対象メソッドの呼び出しを、呼び出し側スレッドの下位スレッドにスケジュールした場合、対象メソッドは非同期では動作しません。呼び出し側スレッドによって完全に処理されるためです。
APL の使用方法
非同期操作の使用を開始する手順は以下のとおりです。
- TComponent を追加して、非同期プログラミングをサポートします。
- IAsyncResult インターフェイスを使用して、非同期プログラミングを実装できるよう TBaseAsyncResult が提供している機能にアクセスします。
- BeginInvoke メソッドを呼び出すと、対象メソッドの非同期呼び出しが開始します。対象メソッドの呼び出しが実行されるスレッドを管理することができます。IAsyncResult による対象メソッドの実行が完了し、非同期メソッドの結果が呼び出し側に返されるまで、現在のスレッドは通常どおり処理を続けます。
- IAsyncResult の処理が完了するまで待機するには、EndInvoke メソッドを呼び出します。BeginInvoke の呼び出しそれぞれについて、対応する EndInvoke の呼び出しが必要です。
- BeginInvoke の呼び出しには、コールバック メソッドを含めることができます。そうすると、対象メソッドが終了したときに、コールバック メソッドが呼び出されます。このように進めると、コールバックの中で EndInvoke を呼び出して、結果を取得することができます。あるいは、上記のように、呼び出し側スレッドで EndInvoke を呼び出すこともできます。