82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef _LIB_THREAD_H_
 | ||
| #define _LIB_THREAD_H_
 | ||
| 
 | ||
| /******************************************************************
 | ||
|  *  - 主要功能 -
 | ||
|  *	实现线程的基本封装操作。支持暂停、恢复线程,等待线程以及设
 | ||
|  *	置线程优先级等基本操作。
 | ||
|  *****************************************************************/
 | ||
| #ifndef _MSC_VER
 | ||
| #include "pthread.h"
 | ||
| #endif
 | ||
| 
 | ||
| namespace thread
 | ||
| {
 | ||
| class BaseThread
 | ||
| {
 | ||
| private:
 | ||
| #ifdef _MSC_VER
 | ||
| 	static void CALLBACK ThreadRoutine(BaseThread* thread_ptr);
 | ||
| #else
 | ||
| 	static void* ThreadRoutine(void* thread_ptr);
 | ||
| #endif
 | ||
| protected:
 | ||
| 	//terminated函数用于判断现成是否被设置了终止标记
 | ||
| 	inline bool terminated()
 | ||
| 	{
 | ||
| 		return terminated_;
 | ||
| 	}
 | ||
| 	//线程事物处理例程函数,子类应当继承此函数
 | ||
| 	virtual void OnRoutine();
 | ||
| 	//线程例程终止后的通知函数
 | ||
| 	virtual void OnTerminated();
 | ||
| public:
 | ||
| 	BaseThread();
 | ||
| 	virtual ~BaseThread();
 | ||
| 
 | ||
| #ifdef _MSC_VER
 | ||
| 	//获取线程句柄
 | ||
| 	inline void* getHandle()
 | ||
| 	{
 | ||
| 		return thread_;
 | ||
| 	}
 | ||
| 	//获取线程ID
 | ||
| 	inline unsigned long getThreadId()
 | ||
| 	{
 | ||
| 		return thread_id_;
 | ||
| 	}
 | ||
| #endif
 | ||
| 	//恢复线程的执行,返回值表示线程到本次恢复操作后,线程仍需恢复多少次才能恢复执行。
 | ||
| 	//若返回-1则表示恢复线程失败,返回0表示线程已经完全恢复执行。
 | ||
| 	virtual int Start();
 | ||
| 	virtual void Stop();
 | ||
| #ifdef _MSC_VER
 | ||
| 	//获取线程优先级,失败会返回THREAD_PRIORITY_ERROR_RETURN,否则返回值表示线程优先级
 | ||
| 	int getPriority();
 | ||
| 	//设置线程优先级,成功则返回true
 | ||
| 	bool setPriority(int priority);
 | ||
| #endif
 | ||
| 	//等待线程执行完毕,wait_time参数表示等待的最大毫秒数,INFINITE表示无限等待。
 | ||
| 	//注意,调用此函数的线程在此线程执行完毕后会一直处于阻塞状态
 | ||
| 	//参数wait_alert表示调用线程在阻塞期间是否允许进入警告状态(仅对于windows有效)
 | ||
| #ifdef _MSC_VER
 | ||
| 	int waitFor(unsigned int wait_time = INFINITE, bool wait_alert = true);
 | ||
| #else
 | ||
| 	int waitFor();
 | ||
| #endif
 | ||
| 	//标记线程的终止标记
 | ||
| 	void terminate();
 | ||
| private:
 | ||
| #ifdef _MSC_VER
 | ||
| 	void*			thread_;			//线程句柄
 | ||
| 	unsigned long	thread_id_;			//线程ID
 | ||
| #else
 | ||
| 	pthread_t		thread_id_;
 | ||
| #endif
 | ||
| 	bool			terminated_;		//线程终止标记,子类在线程例程循环中应当通过调用terminated函数判断线程是否被设置了终止标记
 | ||
| };
 | ||
| };
 | ||
| 
 | ||
| #endif
 | ||
| 
 |