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나노초 증분)에 대한 포인터입니다. 스레드 순서 그룹의 각 스레드는 이 기간 동안 한 번 실행됩니다. 마침표가 끝나기 전에 모든 스레드가 실행을 완료하면 모든 스레드는 마침표의 나머지 기간이 경과할 때까지 기다렸다가 다시 실행됩니다.
이 매개 변수의 가능한 값은 플랫폼에 따라 달라지지만 이 매개 변수는 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 그룹 무한 제한 시간 간격으로 만들어집니다. 이는 디버깅 목적으로 유용할 수 있습니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
지정된 식별자가 있는 스레드 순서 그룹이 이미 있는 경우 함수가 실패하고 마지막 오류를 ERROR_ALREADY_EXISTS 설정합니다.
설명
호출 스레드는 부모 스레드로 간주됩니다. 각 스레드 순서 그룹에는 하나의 부모 스레드가 있습니다. 각 부모 스레드에는 선행 스레드가 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 |
라이브러리 | Avrt.lib |
DLL | Avrt.dll |