2009-03-06 9 views
1

최근에 ATL의 CThreadPool 클래스를 발견했으며이 찾기에 매우 만족했습니다. 그것은 할 일의 일부 큐를 처리하기 위해 여러 작업자 스레드를 갖는 syncronization 의미를 처리 할 청초한 작은 클래스입니다. 작업은 일부 외부 프로세스에 의해 CThreadPool 객체에 전달됩니다.CThreadPool을 사용하여 작업이 완료된 시점을 확인하는 방법은 무엇입니까?

깨끗하고 청결한 동안 모든 작업이 완료되었는지 여부를 찾는 방법이없는 것 같습니다. 그렇게하는 가장 좋은 방법은 무엇입니까?

예를 들어, 10 개의 과중한 계산 작업을 수행 한 다음 다른 작업을 수행해야한다고 가정 해보십시오. 작업이 완료된 것을 알기 전까지는 계속 진행할 수 없습니다.

그래서 10 개의 스레드로 CThreadPool을 만들고 큐에 작업을 넣은 다음 스레드로 이동합니다. 작업 완료 시점을 어떻게 알 수 있습니까?

보아스는

답변

1

나는 당신이 당신의 노동자 개체의 Execute() 방법은 '주'스레드가 모니터링 할 수있는 IPC의 일부 양식을 사용하도록해야한다고 생각합니다. 메인 스레드가 대기 할 수 있고 대기 완료 횟수를 세머 할 수있는 세마포어에 Execute() 메서드 호출 ReleaseSemaphore()이있는 것입니다. 또는 스레드 풀 작업자는 주 스레드가 메시지를 가져 오는 메시지 큐에 작업 항목이 완료되었다는 메시지를 게시 할 수 있습니다.

1

완료된 작업을 대기하는 가장 깨끗한 방법은 event을 만든 다음 WaitForSingleObject을 호출하여 작업자 스레드가 완료 될 때까지 기다리는 것입니다.

관련 문제