次の方法で共有


AvRtCreateThreadOrderingGroup 関数 (avrt.h)

スレッド順序付けグループを作成します。

優先度の高いクライアント スレッドが実行されている場合にスレッド順序グループのサーバー スレッドが不足しないようにするには、 AvRtCreateThreadOrderingGroupEx 関数を 使用します。

構文

AVRTAPI BOOL AvRtCreateThreadOrderingGroup(
  [out]          PHANDLE        Context,
  [in]           PLARGE_INTEGER Period,
  [in, out]      GUID           *ThreadOrderingGuid,
  [in, optional] PLARGE_INTEGER Timeout
);

パラメーター

[out] Context

コンテキスト ハンドルへのポインター。

[in] Period

スレッド順序付けグループの期間を指定する 100 ナノ秒単位の値へのポインター。 スレッド順序付けグループ内の各スレッドは、この期間中に 1 回実行されます。 すべてのスレッドが期間が終了する前に実行を完了した場合、すべてのスレッドは、期間の残りの部分が経過するまで待機してから、もう一度実行されます。

このパラメーターに指定できる値はプラットフォームによって異なりますが、このパラメーターは 500 マイクロ秒以下、または0x1FFFFFFFFFFFFFFFほど高くすることができます。 このパラメーターが 500 マイクロ秒未満の場合は、500 マイクロ秒に設定されます。 このパラメーターが最大値より大きい場合は、0x1FFFFFFFFFFFFFFFに設定されます。

[in, out] ThreadOrderingGuid

作成するスレッド順序付けグループの一意識別子へのポインター。 この値がスレッド順序付けサービスに一意でない場合、関数は失敗します。

識別子が入力時にGUID_NULLされている場合、スレッド順序サービスは一意の識別子を生成して返します。

[in, optional] Timeout

タイムアウト値へのポインター。 グループ内のすべてのスレッドは、 Period と Timeout 内で実行を完了 する必要があります。

スレッドが期間内に処理を完了できず、このタイムアウト間隔を加えた場合、スレッド順序付けグループから削除されます。 親が期間内にタイムアウト間隔を加えた処理を完了できなかった場合、スレッド順序付けグループは破棄されます。

このパラメーターに指定できる値はプラットフォームによって異なりますが、500 マイクロ秒まで低くすることも、0x1FFFFFFFFFFFFFFFまで高くすることもできます。 このパラメーターが 500 マイクロ秒未満の場合は、500 マイクロ秒に設定されます。 このパラメーターが最大値より大きい場合は、0x1FFFFFFFFFFFFFFFに設定されます。

このパラメーターが NULL または 0 の場合、既定値は Period の値の 5 倍です。

このパラメーターがTHREAD_ORDER_GROUP_INFINITE_TIMEOUT場合、グループは無限のタイムアウト間隔で作成されます。 これは、デバッグの目的で役立ちます。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

指定した識別子を持つスレッド順序付けグループが既に存在する場合、関数は失敗し、最後のエラーをERROR_ALREADY_EXISTSに設定します。

注釈

呼び出し元のスレッドは親スレッドと見なされます。 各スレッド順序付けグループには、1 つの親スレッドがあります。 各親スレッドには、0 個以上の先行スレッドと 0 個以上の後続スレッドを含めることができます。 クライアント スレッドは、スレッド順序付けグループに参加し、 AvRtJoinThreadOrderingGroup 関数を使用して先行タスクと後続タスクのどちらであるかを指定できます。

親スレッドは、 AvRtWaitOnThreadOrderingGroup 関数によって制御されるループ内の各期間中に実行されるコードを囲みます。

スレッド順序付けグループを削除するには、 AvRtDeleteThreadOrderingGroup 関数を 呼び出します。

スレッドは、複数のスレッド順序付けグループを作成し、複数のスレッド順序付けグループに参加できます。 ただし、スレッドは、同じスレッド順序付けグループに複数回参加することはできません。

次のスニペットでは、スレッド順序付けグループを作成します。

#include <windows.h>
#include <avrt.h>
#include <stdio.h>

#pragma comment(lib, "Avrt.lib")

#define _100NS_IN_1MS 10000

int main( void )
{
    HANDLE hContext = NULL;
    LARGE_INTEGER period, timeout;
    GUID guid = { 0 };
    BOOL bRes;

    period.QuadPart = Int32x32To64(_100NS_IN_1MS, 1000);   // 1 second
    timeout.QuadPart = Int32x32To64(_100NS_IN_1MS, 10000); // 10 seconds

    bRes = AvRtCreateThreadOrderingGroup( 
            &hContext,
            &period,
            &guid,
            &timeout );

    if( bRes != TRUE )
    {
        printf("Error creating group (%d)\n", GetLastError());
            return 1;
    }

    return 0;
}

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー avrt.h
Library Avrt.lib
[DLL] Avrt.dll

こちらもご覧ください

スレッド順序付けサービス