Win32 API 日本語リファレンス
ホームMedia › IReferenceClockTimerControl

IReferenceClockTimerControl

COM
IIDebec459c-2eca-4d42-a8af-30df557614b8継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IReferenceClockTimerControl インターフェイスは、参照クロックが使用するタイマー周期を変更します。このインターフェイスは DirectShow のシステム参照クロックによって公開されます。

解説(Remarks)

既定では、DirectShow のシステム参照クロックはタイマー周期をタイマーが許容する最小値に設定します。通常、この値は 1 ミリ秒です。

タイマー周期は Windows 全体のグローバルな設定です。解像度を高くすると、待機関数のタイムアウト間隔の精度を向上させることができます。ただし、スレッドスケジューラーがタスクをより頻繁に切り替えるようになるため、システム全体のパフォーマンスが低下する可能性もあります。また、高い解像度は CPU の電源管理システムが省電力モードに移行することを妨げる場合もあります。なお、解像度を高く設定しても、高分解能パフォーマンスカウンターの精度は向上しません。

このインターフェイスの主な目的は、参照クロックの既定のタイマー設定をオーバーライドすることです。そのためには、SetDefaultTimerResolution を値 0 で呼び出します。これによりタイマー解像度が低くなり、ユーザーのコンピューターが省電力モードに移行できるようになる場合があります。(実際の動作は、他にどのようなプロセスが実行されているかなど、多くの要因に依存します。)DVD Navigator フィルターは、ここで説明したとおりにこのインターフェイスを使用します。

DirectShow フィルターがより高いタイマー解像度を必要とする場合は、timeBeginPeriod を呼び出してください。通常、この要件が当てはまるのはレンダラーフィルターのみです。

メソッド 2

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

vtbl 3 HRESULT SetDefaultTimerResolution(LONGLONG timerResolution)

SetDefaultTimerResolution メソッドは、最小タイマー解像度を設定します。

timerResolutionLONGLONGin最小タイマー解像度 (100 ナノ秒単位)。値が 0 の場合、参照クロックは以前の要求をキャンセルします。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります。

戻り値 説明
S_OK
成功しました。

解説(Remarks)

参照クロックは、タイマーの周期を timerResolution に設定しようとします。実際のタイマー周期はハードウェアによって異なる場合があります。タイマー解像度の最小値と最大値を調べるには、timeGetDevCaps 関数を呼び出します。参照クロックは timeBeginPeriod を呼び出してタイマー解像度を設定します。timerResolution が 0 の場合、このメソッドは timeEndPeriod を呼び出して以前のタイマー要求をキャンセルします。(参照クロックが破棄されるときには、以前の要求は自動的にキャンセルされます。)

このメソッドが呼び出されない場合、参照クロックはタイマー解像度を 1 ミリ秒に設定します。電源管理のパフォーマンスを最適にするには、このメソッドを値 0 で呼び出すことをお勧めします。これにより、クロックの既定設定である 1 ミリ秒がオーバーライドされます。グラフ内のいずれかのフィルターがより高いタイマー解像度を必要とする場合は、そのフィルターが個別に timeBeginPeriod を呼び出すことができます。通常、特定のタイマー解像度を必要とするのはレンダラーのみです。

vtbl 4 HRESULT GetDefaultTimerResolution(LONGLONG* pTimerResolution)

GetDefaultTimerResolution メソッドは、参照クロックが要求したタイマー解像度を返します。

pTimerResolutionLONGLONG*out要求されたタイマー解像度を 100 ナノ秒単位で受け取ります。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
NULL ポインター引数です。

解説(Remarks)

pTimerResolution で返される値は、参照クロックが基になるタイマーに設定しようとする周期です。実際のタイマー周期はハードウェアによって異なる場合があります。参照クロックが最小タイマー解像度を要求していない場合、pTimerResolution パラメーターは値 0 を受け取ります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IReferenceClockTimerControl "{EBEC459C-2ECA-4D42-A8AF-30DF557614B8}"
#usecom global IReferenceClockTimerControl IID_IReferenceClockTimerControl "{}"
#comfunc global IReferenceClockTimerControl_SetDefaultTimerResolution  3 int64
#comfunc global IReferenceClockTimerControl_GetDefaultTimerResolution  4 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。