Share via


AvRtCreateThreadOrderingGroupExA 함수(avrt.h)

스레드 순서 그룹을 만들고 서버 스레드를 작업에 연결합니다.

구문

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

매개 변수

[out] Context

컨텍스트 핸들에 대한 포인터입니다.

[in] Period

스레드 순서 지정 그룹의 기간을 지정하는 값(100나노초 증분)에 대한 포인터입니다. 스레드 순서 그룹의 각 스레드는 이 기간 동안 한 번 실행됩니다. 마침표가 끝나기 전에 모든 스레드가 실행을 완료하면 모든 스레드는 마침표의 나머지 기간이 경과할 때까지 기다렸다가 다시 실행됩니다.

이 매개 변수의 가능한 값은 플랫폼에 따라 달라지지만 이 매개 변수는 500 마이크로초 또는 0x1FFFFFFFFFFFFFFF 낮을 수 있습니다. 이 매개 변수가 500 마이크로초 미만이면 500 마이크로초로 설정됩니다. 이 매개 변수가 최댓값보다 크면 0x1FFFFFFFFFFFFFFF 로 설정됩니다.

[in, out] ThreadOrderingGuid

만들 스레드 순서 그룹에 대한 고유 식별자에 대한 포인터입니다. 이 값이 스레드 순서 지정 서비스에 고유하지 않으면 함수가 실패합니다.

입력에서 식별자가 GUID_NULL 스레드 순서 지정 서비스는 고유 식별자를 생성하고 반환합니다.

[in, optional] Timeout

제한 시간 값에 대한 포인터입니다. 그룹 내의 모든 스레드는 기간시간 제한 내에서 실행을 완료해야 합니다.

스레드가 마침표와 이 시간 제한 간격 내에서 처리를 완료하지 못하면 스레드 순서 그룹에서 제거됩니다. 부모가 시간 및 제한 시간 간격 내에서 처리를 완료하지 못하면 스레드 순서 그룹이 제거됩니다.

이 매개 변수의 가능한 값은 플랫폼에 따라 달라지지만 500 마이크로초 또는 0x1FFFFFFFFFFFFFFF 낮을 수 있습니다. 이 매개 변수가 500 마이크로초 미만이면 500 마이크로초로 설정됩니다. 이 매개 변수가 최댓값보다 크면 0x1FFFFFFFFFFFFFFF 로 설정됩니다.

이 매개 변수가 NULL 또는 0인 경우 기본값은 Period 값의 5배입니다.

이 매개 변수가 THREAD_ORDER_GROUP_INFINITE_TIMEOUT 그룹 무한 제한 시간 간격으로 만들어집니다. 이는 디버깅 목적으로 유용할 수 있습니다.

[in] TaskName

작업의 이름입니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

지정된 식별자가 있는 스레드 순서 그룹이 이미 있는 경우 함수가 실패하고 마지막 오류를 ERROR_ALREADY_EXISTS 설정합니다.

설명

호출 스레드는 부모 스레드로 간주됩니다. 각 스레드 순서 그룹에는 하나의 부모 스레드가 있습니다. 각 부모 스레드에는 선행 스레드가 0개 이상 있고 후속 스레드가 0개 이상 있을 수 있습니다. 클라이언트 스레드는 스레드 순서 그룹을 조인하고 AvRtJoinThreadOrderingGroup 함수를 사용하여 선행 또는 후속 작업인지 여부를 지정할 수 있습니다.

부모 스레드는 AvRtWaitOnThreadOrderingGroup 함수에 의해 제어되는 루프 내에서 각 기간 동안 실행할 코드를 묶습니다.

스레드 순서 그룹을 삭제하려면 AvRtDeleteThreadOrderingGroup 함수를 호출합니다.

스레드는 둘 이상의 스레드 순서 그룹을 만들고 둘 이상의 스레드 순서 그룹을 조인할 수 있습니다. 그러나 스레드는 동일한 스레드 순서 그룹을 두 번 이상 조인할 수 없습니다.

스레드 순서 지정 그룹의 부모 및 클라이언트 스레드는 높은 우선 순위에서 실행됩니다. 그러나 스레드 순서 그룹을 관리하는 서버 스레드는 정상 우선 순위로 실행됩니다. 따라서 다른 우선 순위가 높은 스레드가 실행 중인 경우 한 클라이언트 스레드에서 다른 클라이언트 스레드로 전환하는 데 지연이 있을 수 있습니다. 이 함수의 TaskName 매개 변수는 서버 스레드와 연결할 작업을 지정합니다.

예제

다음 코드 조각은 스레드 순서 그룹을 만듭니다.

#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 = AvRtCreateThreadOrderingGroupEx( 
            &hContext,
            &period,
            &guid,
            &timeout,
            TEXT("Audio") );

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

    return 0;
}

참고

avrt.h 헤더는 AVRtCreateThreadOrderingGroupEx를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 avrt.h
라이브러리 Avrt.lib
DLL Avrt.dll

추가 정보

스레드 순서 지정 서비스