有些iPhone程序是直接从其他平台移植过来,或者说你喜欢使用cpp,再或者是你打算让你的程序跨越平台,那么使用跨平台的cpp库无疑是一个很好的选择。这就是本系列的主题。
第一篇为大家分享一段本人自用的线程类。它使用pthread,因此可以跨平台使用(windows下需要下载pthread库)。由于程序很简单,就不做什么说明了。
头文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #ifndef _UTILS_THREAD_H_ #define _UTILS_THREAD_H_ #include <pthread.h> namespace utils { class CThread { public: typedef void( ThreadCallback( void * ) ); typedef enum { THREAD_STOP = 0, THREAD_RUN, THREAD_PAUSE } ThreadState; CThread(ThreadCallback* callback, void* pUserData); ~CThread(); ThreadState state() const { return m_state; } ThreadCallback* callback() const { return m_pCallback; } void* userData() const { return m_pUserdata; } pthread_t thread() const { return m_thread; } void run(); void stop(); void pause(); private: ThreadCallback* m_pCallback; pthread_t m_thread; ThreadState m_state; unsigned int m_uiThreadId; void* m_pUserdata; }; } #endif // _UTILS_THREAD_H_ |
cpp文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include "utils/Thread.h" namespace utils { void* threadRun( void *_ptr ) { unsigned char run = 1; CThread* theThread = ( CThread* )_ptr; while( run ) { switch( theThread->state() ) { case CThread::THREAD_RUN: { CThread::ThreadCallback* callback = theThread->callback(); if ( callback ) callback( theThread->userData() ); break; } case CThread::THREAD_STOP: { run = 0; break; } case CThread::THREAD_PAUSE: { msleep(50); } } } return NULL; } CThread::CThread(ThreadCallback* callback, void* pUserData) : m_pCallback(callback), m_pUserdata(pUserData), m_state(THREAD_PAUSE) { m_uiThreadId = pthread_create( &m_thread,NULL,threadRun, (void *)this ); } CThread::~CThread() { pthread_join( m_thread, NULL ); } void CThread::run() { m_state = THREAD_RUN; } void CThread::stop() { m_state = THREAD_STOP; } void CThread::pause() { m_state = THREAD_PAUSE; } } |
msleep函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <sys/time.h> void msleep( unsigned int ms ) { int microsecs; struct timeval tv; microsecs = ms * 1000; tv.tv_sec = microsecs / 1000000; tv.tv_usec = microsecs % 1000000; select( 0, NULL, NULL, NULL, &tv ); } |
使用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void* onRun(void* ptr) { ...... } utils::CThread* m_pThread = new utils::CThread((ThreadCallback*)onRun,NULL); m_pThread->run(); ...... delete m_pThread; |
作者:bagusflyer



