Contents
ACE_Thread
POSIX Pthreads, Solaris threads, Win32 threads, VxWorks threads, or pSoS threads 등등의 wrapper 클래스다. ACE_OS 처럼, static member 로 가진 wrapper 함수들을 불러쓰면 된다. ACE 는 이것을 통한 쓰레드 제어보다, ACE_Thread_Manager 를 통해 쓰레드를 관리하는것을 권장한다고 한다. 실제로 ACE_Thread 를 쓰는 코드는 배포된 예제속에도 없을 정도...
간단한 예제
leak 등이 있는지는 확인 안해봤다. 단순한 저레벨 wrapper 인지라, pthread api 들을 사용하는 기분으로 쓰면 된다.
#include "ace/OS.h" #include "ace/Log_Msg.h" #include "ace/Thread.h" void* sleeper(void* arg) { ACE_DEBUG((LM_INFO, "[%T:%t] thread spawnded\n")); ACE_OS::sleep(10); ACE_DEBUG((LM_INFO, "[%T:%t] thread return\n")); return 0; } int main(int argc, char* argv[]) { ACE_thread_t t_id; ACE_hthread_t t_handle; if(ACE_Thread::spawn((ACE_THR_FUNC)sleeper, 0, THR_NEW_LWP|THR_JOINABLE, &t_id, &t_handle)==-1) ACE_ERROR_RETURN((LM_ERROR,"thread spawn fail"),-1); if(ACE_Thread::join(t_id)==-1) ACE_ERROR_RETURN((LM_ERROR,"thread join fail"),-1); ACE_DEBUG((LM_INFO, "ok\n")); return 0; }
실행해보면,
[yoonkn@nirvana 05.ace_thread_as_func]$ ./a.out [ 16:07:46.102096:3210386352] thread spawnded [ 16:07:56.107269:3210386352] thread return ok [yoonkn@nirvana 05.ace_thread_as_func]$
