스레드 종료 처리할때 WaitForMultipleObjects에서 사용했습니다.
스레드 클래스가 있고 stl컨테이너를 이용해서 이 스레드 클래스들을 관리하는데,,
프로그램 종료 처리시 스레드를 안전하게 종료후 애플리케이션이 종료되게금하기위해
WaitForMultipleObjects를 사용했는데요. 이 함수가 핸들에대한 배열을 인자로 받네요. (뭔가 시대착오적인 냄새가,,)
그래서 지역적으로 vector를 생성시켜서 처리했습니다.
Code: Select all
// 스레드클래스
class Thread
{
public:
HANDLE GetHandle() const { return m_hThread; }
private:
HANDLE m_hThread;
};
void XXX::Destroy()
{
using namespace std;
vector<HANDLE> waitList;
{
ScopedLock<CSLock> unnamed( m_ThreadListLock ); // 스레드 동기화
waitList.reserve( m_ThreadList.size() );
transform( m_ThreadList.begin(), m_ThreadList.end(), back_inserter(waitList), mem_fun(&Thread::GetHandle) );
DWORD waitRes = WaitForMultipleObjects( (DWORD)waitList.size(), &(waitList.front()), TRUE, 5000 ); // <- 요기서 사용했음.
// ...
// 종료처리
// ...
}
}
비로서 느끼는건데,,
stl의 알고리즘쪽은 한가지 작업을 한라인에 표현하려는 의도가 강한것 같습니다.
뭐, 함수 단위니 당연한 말이겠지만요,,
막 쓰기에는 뭔가 위험한 요소들이 분명 있기는 하지만은,,
코드를 읽는 입장을 생각해보면, 가장 이상적인 형태인것 같습니다.
(복잡한 사정은 숨기고, 의미만 표현되니까요.)