2006-10-03(火) 曇一時晴 安静時心拍数 61 [長年日記]
_ Thread Class
スレッドクラスを作ってみました。ダサいけどこんな感じ。
#ifndef THREAD_H #define THREAD_H #includeclass Thread { public: typedef enum { JOINABLE, DETACHED }DETACHSTATE; Thread(); ///< default constructor virtual ~Thread(); ///< destructor virtual int start(DETACHSTATE detachstate); ///< start method virtual int join(); ///< join method protected: pthread_t m_threadid; virtual int run(); ///< 派生クラスでoverrideする private: bool m_join_flag; static void *start_routine(void *); }; #endif // THREAD_H
#include "Thread.h" Thread::Thread() : m_threadid(0), m_join_flag(true) { } Thread::~Thread() { } void *Thread::start_routine(void *arg) { if(arg == NULL){ return NULL; } Thread *p = (Thread *)arg; p->run(); return arg; } int Thread::start(DETACHSTATE detachstate) { pthread_attr_t attr; pthread_attr_init(&attr); pthread_t pt = pthread_create(&m_threadid, &attr, Thread::start_routine, this); if(detachstate == DETACHED){ pthread_detach(m_threadid); m_join_flag = false; } pthread_attr_destroy(&attr); return pt; } int Thread::join() { pthread_t pt = 0; if(m_join_flag){ pt = pthread_join(m_threadid, NULL); } return pt; } int Thread::run() { return 0; }