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을
이 매개 변수가 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 |