5. [pywin32] GetThread... 관련 함수
이번에 설명할 함수는 다음의 6개 함수에 대해서 설명하려고 합니다.
1. int = GetExitCodeThread(handle)
쓰레드의 종료 코드를 반환하는 함수입니다. 쓰레드 마지막에 return X 라고 쓰면 X값이 종료 코드가 되는 것입니다.
인자로는 handle : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.
2. bool = GetThreadIOPendingFlag(Thread)
쓰레드에 보류중인 I/O 요청이 있는지 여부를 반환하는 함수입니다.
인자로는 Thread : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.
리턴값은 True/False 이며,
- True: 보류중인 I/O 요청이 존재함
- False: 보류중인 I/O 요청이 존재하지 않음
3. int = GetThreadPriority(handle)
쓰레드의 우선순위 레벨을 반환하는 함수입니다. 참고로 우선순위는 프로세스에서 쓰는 우선순위 클래스와 쓰레드에서 쓰는 우선순위 레벨이 존재합니다. 프로세스내의 쓰레드는 우선순위 클래스가 동일하며, 우선순위 클래스와 우선순위 레벨을 통해 기본 우선순위를 결정합니다.
인자로는 handle : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.
리턴값은 다음과 같습니다.
값 | 이름 | 의미 |
1 | win32process.THREAD_PRIORITY_ABOVE_NORMAL | 우선순위 클래스보다 1포인트 높음 |
-1 | win32process.THREAD_PRIORITY_BELOW_NORMAL | 우선순위 클래스보다 1포인트 낮음 |
2 | win32process.THREAD_PRIORITY_HIGHEST | 우선순위 클래스보다 2포인트 높음 |
-15 | win32process.THREAD_PRIORITY_IDLE | REALTIME_PRIORITY_CLASS 에서는 기본 우선순위가 16이며 그외에는 1임 |
-2 | win32process.THREAD_PRIORITY_LOWEST | 우선순위 클래스보다 2포인트 낮음 |
0 | win32process.THREAD_PRIORITY_NORMAL | 우선순위 클래스의 보통 우선순위 레벨 |
15 | win32process.THREAD_PRIORITY_TIME_CRITICAL | REALTIME_PRIORITY_CLASS 에서는 기본 우선순위가 31이며 그외에는 15임 |
우선순위 클래스의 종류는 GetPrioiryClass 함수를 다룰 때 설명하겠습니다.
4. bool = GetThreadPriorityBoost(Thread)
쓰레드의 동적인 우선순위 레벨 상승이 가능한지 여부를 반환하는 함수입니다.
인자로는 Thread : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.
리턴값이 True 일 경우, 동적 상승이 불가능하며, False일 경우, 동적 상승이 가능하다는 뜻으로 True와 False가 반대인 것에 주의해야 합니다.
5. int, int = GetWindowThreadProcessId(hwnd)
특정 윈도우를 만든 쓰레드와 프로세스의 아이디를 반환하는 함수입니다.
인자로는 hwnd : int가 있습니다, 이건 윈도우 핸들값입니다.
리턴값은 (threadId, processId) 순서입니다.
6. dict = GetThreadTimes(Thread)
쓰레드의 시간정보를 반환하는 함수입니다.
인자로는 Thread : PyHANDLE가 있으며, 쓰레드의 핸들값입니다.
리턴값은 dict 형태로, 4개의 값을 리턴합니다.
- CreationTim: 쓰레드가 생성된 시간입니다.
- ExitTime: 쓰레드가 종료된 시간입니다.
- KernelTime: 쓰레드가 커널모드에서 동작한 시간입니다.
- UserTime: 쓰레드가 유저모드에서 동작한 시간입니다.
import win32process
import win32api
import win32gui
import win32event
def cnt1():
i = 0
return 3
q = tuple()
res1 = win32process.beginthreadex(None, 0, cnt1, q, win32process.CREATE_SUSPENDED)
win32process.ResumeThread(res1[0])
win32event.WaitForSingleObject(res1[0], 3000)
# 쓰레드가 종료될때 까지 대기
threadExitCode=win32process.GetExitCodeThread(res1[0])
threadIOPendingFlag = win32process.GetThreadIOPendingFlag(res1[0])
threadPriority = win32process.GetThreadPriority(res1[0])
threadPriorityBoost = win32process.GetThreadPriorityBoost(res1[0])
windHwnd = win32gui.GetForegroundWindow()
# 윈도우 핸들 값 획득
windThPsId = win32process.GetWindowThreadProcessId(windHwnd)
threadTime = win32process.GetThreadTimes(res1[0])
print(f"threadExitCode : {threadExitCode}")
print(f"threadIOPendingFlag : {threadIOPendingFlag}")
print(f"threadPriority : {threadPriority}")
print(f"threadPriorityBoost : {threadPriorityBoost}")
print(f"threadID : {windThPsId[0]}, processId : {windThPsId[1]}")
print(f"threadTime : {threadTime}")
실행결과 위와 같은 결과를 얻었다
'pywin32 > win32process' 카테고리의 다른 글
7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수 (0) | 2020.12.23 |
---|---|
6. [pywin32] SetThreadPriority & Boost 함수 (0) | 2020.12.22 |
4. [pywin32] ResumeThread 함수 (0) | 2020.10.27 |
3. [pywin32] SuspendThread 함수 (0) | 2020.10.27 |
2. [pywin32] beginthreadex 함수 (0) | 2020.10.27 |