Win32 API 日本語リファレンス
ホームUI.Shell › IRunnableTask

IRunnableTask

COM
IID85788d00-6807-11d0-b810-00c04fd706ec継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

オブジェクトが公開することで、バックグラウンドスレッドで処理を実行できるようにするフリースレッドインターフェイスです。

解説(Remarks)

名前空間拡張がフリースレッドで、アイコン抽出などのタスクをスケジューラーに管理させたい場合は、IRunnableTask を実装します。実装が必須なのは Run メソッドと IsRunning メソッドのみです。KillResumeSuspend を実装したくない場合は、単に E_NOTIMPL を返すようにしてください。

IRunnableTask をバックグラウンドスレッドでの画像抽出に使用する場合、すなわちオブジェクトが IExtractImage を公開している場合は、システムが IExtractImage::Extract を使用してタスクを管理するため、Run は不要です。この場合、その他のメソッド(KillResumeSuspend)は省略可能ですが、実装されていればシステムによって使用されます。

このインターフェイスを直接呼び出すことはありません。IRunnableTask は、アプリケーションがこのインターフェイスを認識していることをシステムが確認した場合にのみ、オペレーティングシステムによって使用されます。

IRunnableTask は、上記の 5 つのメソッドに加えて IUnknown を実装します。

注意 Windows Vista 以降。 Windows Vista より前では、このインターフェイスは Shlobj.h で宣言されていました。

メソッド 5

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Run()

タスクの開始を要求します。

戻り値

型: HRESULT

次の 2 つのコードのいずれかを返します。

戻り値のコード 説明
S_OK
実行が完了しました。
E_PENDING
実行が中断されています。

解説(Remarks)

このメソッドの戻り値は、タスクの実行が完了したか中断されたかを示すだけです。実装者が呼び出し元に伝える必要のあるその他のエラーは、コールバック関数などの別の手段を通じて提供する必要があります。

vtbl 4 HRESULT Kill(BOOL bWait)

タスクの停止を要求します。

bWaitBOOLin現在は使用されていません。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドの実装は省略可能です。この機能をサポートしない場合は、単に E_NOTIMPL を返すだけのダミー実装を作成してください。

vtbl 5 HRESULT Suspend()

タスクの中断を要求します。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合は標準的な COM 定義のエラーコードを返します。

解説(Remarks)

このメソッドの実装は省略可能です。この機能をサポートしない場合は、単に E_NOTIMPL を返すだけのダミー実装を作成してください。

vtbl 6 HRESULT Resume()

タスクの再開を要求します。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合は標準的な COM 定義のエラーコードを返します。

解説(Remarks)

このメソッドの実装は省略可能です。この機能をサポートしない場合は、単に E_NOTIMPL を返すだけのダミー実装を作成してください。

vtbl 7 DWORD IsRunning()

サムネイル抽出などのタスクの状態に関する情報を要求します。

戻り値

型: LONG

現在の実行状態を示す次の値のいずれかを返します。

戻り値のコード 説明
IRTIR_TASK_NOT_RUNNING
抽出がまだ開始されていません。
IRTIR_TASK_RUNNING
タスクは実行中です。
IRTIR_TASK_SUSPENDED
タスクは中断されています。
IRTIR_TASK_PENDING

スレッドに対して IRunnableTask::Kill が呼び出されましたが、スレッドがまだ完全にシャットダウンしていません。

IRTIR_TASK_FINISHED
タスクは完了しました。

解説(Remarks)

このメソッドは必ず実装する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_IRunnableTask "{85788D00-6807-11D0-B810-00C04FD706EC}"
#usecom global IRunnableTask IID_IRunnableTask "{}"
#comfunc global IRunnableTask_Run        3
#comfunc global IRunnableTask_Kill       4 int
#comfunc global IRunnableTask_Suspend    5
#comfunc global IRunnableTask_Resume     6
#comfunc global IRunnableTask_IsRunning  7
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。