- 비동기 함수 호출
- Complete Routine도 APC 활용
- ReadFileEx(), WriteFileEx(), SetWaitableTimer()도 APC 메커니즘 기반
- APC Queue
> 비동기 입출력 결과 저장을 위해 운영체제가 각 쓰레드마다 할당하는 메모리 영역
> 비동기 함수 호출 메커니즘 의미
> 모든 쓰레드는 자신만의 APC Queue를 가지고 있고 쓰레드 별로 독립적임
> 쓰레드가 알림가능 상태에 놓이게 될 때 호출 됨
- Alertable wait
> 비동기 입출력을 위한 특별한 대기 상태, 비동기 입출력 함수를 호출한 쓰레드가 이 상태에 있어야만 완료 루틴이 호출 될 수 있음
>Sleep() : Wait가 시작되는 시점 부터 Wait가 끝나는 시점까지 CPU시간을 사용하지 않음
>SleepEx(DWORD dwMiliseconds, BOOL bAlertable)
->bAlertable가 TRUE일 경우 : 함수 호출한 쓰레드를 알림 가능 상태로 변경
> Alertable wait 대기 상태 : Alertable wait 상태가 끝나기 전에 CPU 시간을 할당 받아 완료 루틴을 호출하고, 더 처리할 내용이 없으면 대기 상태가 끝남
- DWORD QueueUserAPC(
PAPCFUNC pfnAPC,
HANDLE hThread, // GetCurrentThread() 반환 값으로 받을 수 있음
ULONG_PTR dwData
);
> 유저모드 APC Queue에 호출하고자 하는 함수 정보 전달
> pfnAPC : VOID CALLBACK APCProc(ULING_PTR dwParam) 의 타입의 비동기 호출할 함수
> hThread : 비동기 함수 정보를 추가할 APC Queue지정. APC Queue를 소유하는 쓰레드 핸들
> dwData : 전달 인자
'programing > C++' 카테고리의 다른 글
비동기 입출력 (0) | 2017.03.10 |
---|---|
쓰레드 사용시에... (0) | 2017.03.07 |
VLD(Visual Leak Detector) 사용법 (0) | 2017.02.22 |
포인터 (0) | 2017.02.17 |
DLL 사용시 내부 함수 목록 확인 및 lib 생성, 명시적 연결 (0) | 2017.02.01 |