龙宇网的专栏

路漫漫其修远兮,吾将上下而求索!

简单的线程基类

 

typedef unsigned (WINAPI *PTHREADFUN)(LPVOID lpParameter);

class CThread
{
public:
 CThread(void) {}
 ~CThread(void) {}

 void Start(void);
 void Stop(void) const { CloseHandle(m_hThread); }

 static DWORD WINAPI ThreadFun(LPVOID lpParameter);
 virtual DWORD WINAPI ThreadWorkItem(LPVOID lpParameter) = 0;

private:
 HANDLE m_hThread;
 DWORD m_dwThreadID;
};

inline void CThread::Start(void)
{
 m_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, NULL, (PTHREADFUN) ThreadFun, this, 0, (unsigned*) &m_dwThreadID));
 if (m_hThread == NULL)
 {
  throw Exception("Error: Start thread!");
 }
}

inline DWORD WINAPI CThread::ThreadFun(LPVOID lpParameter)
{
 CThread *pThread = reinterpret_cast<CThread*> (lpParameter);
 pThread->ThreadWorkItem(lpParameter);
 return 0;
}

只要继承上面的类,然后重写ThreadWorkItem(LPVOID)这个函数就可以了。

class test : public CThread
{
public:
 test(void) {}
 ~test(void) {}

 DWORD WINAPI ThreadWorkItem(LPVOID lpParameter){ cout<<"线程执行的操作"<<endl; }

};

 

 

阅读更多
个人分类: 学习编程
上一篇Effective C++中的条款
下一篇C++: 静态调用
想对作者说点什么? 我来说一句

Android项目基类BaseActivity

2015年03月03日 413KB 下载

没有更多推荐了,返回首页

关闭
关闭