|
Help를 자세히 보도록 노력하겠습니다.
정확하게 이해 했고 프로그램 테스트 결과 정상적인 것을 확인했습니다.
많은 도움 감사합니다.
ㄱㄴ 님이 쓰신 글 :
: 57996번글에서도 말씀드렸습니다만,
: WIN32 API 함수인 WaitForMultipleObjects 도움말을 보면 아래와 같은데
: 이에 따르면, bWaitAll 이 TRUE인 경우에는 반환값이 WAIT_OBJECT_0 부터 (WAIT_OBJECT_0 + nCount - 1) 사이의 어떤 값이든 전달한 핸들의 오브젝트들이 모두 시그널드 상태라고 합니다. 예를 들어, 전달한 핸들이 스레드 핸들들이라면 해당 스레드들이 모두 종료되었음(terminate)을 뜻하는 것이죠.
: Return Value: WAIT_OBJECT_0 to (WAIT_OBJECT_0 + nCount - 1)
: Meaning: If bWaitAll is TRUE, the return value indicates that the state of all specified objects is signaled.
: If bWaitAll is FALSE, the return value minus WAIT_OBJECT_0 indicates the lpHandles array index of the object that satisfied the wait. If more than one object became signalled during the call, this is the array index of the signalled object with the smallest index value of all the signalled objects.
:
: index = 0;
: int i, k;
: unsigned a;
: for (i = 0; i < THREAD_COUNT; i++) {
: thread[i] = new ImpThread(i);
: handle = (HANDLE)thread[i]->Handle; //handle 배열의 각 원소의 값은 HANDLE 형이어야 함
: }
: Sleep(10);
:
: dwWaitResult = WaitForMultipleObjects(THREAD_COUNT, handle, TRUE, INFINITE);
:
: if (dwWaitResult>=WAIT_OBJECT_0 && dwWaitResult<=WAIT_OBJECT_0 + THREAD_COUNT - 1) {
: //성공
: }
: else {
: //실패
: }
:
: 한편, TThread의 Handle에 대한 도움말을 보면 아래와 같습니다. 즉, Handle은 WIN32 API에 사용할 수 있는 유효한 핸들이라는 뜻입니다. HANDLE 형으로 형변환해서 WIN32 API 함수에 넘겨주면 되는 것입니다.
: TThread::Handle
: Contains the thread's handle.
: __property int Handle = {read=FHandle, nodefault};
: Description
: Use Handle when calling Win32 API functions for thread manipulation.
:
: 끝으로, 질문 내용을 보면, 배열과 포인터의 관계에 대해 더 깊은 공부가 있어야 할 것으로 보입니다.
|