<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->
classCThread
{
public:
/**//**
*DefaultConstructor
*/
CThread()
{
m_pThreadFunction=CThread::EntryPoint;
m_runthread=FALSE;
}
/**//**
*DefaultDestructor
*alsodestroysthethread
*/
~CThread()
{
if(m_hThread)
Stop(true);//threadstillrunning,soforcethethreadtostop!
}
/**//**
*Startsthethread.
*@paramdwCreationFlagstheflagstouseforcreatingthethread.seeCreateThread()inthewindowssdk.
*/
DWORDStart(DWORDdwCreationFlags=0)
{
m_runthread=true;
m_hThread=CreateThread(NULL,0,m_pThreadFunction,this,0,&dwCreationFlags);
m_dwExitCode=(DWORD)-1;
returnGetLastError();
}
/**//**
*Stopsthethread.
*
*@parambForceKilliftrue,theThreadiskilledimmediately
*/
DWORDStop(boolbForceKill=false)
{
if(m_hThread)
{
//尝试"温柔地"结束线程
if(m_runthread==TRUE)
m_runthread=FALSE;//first,trytostopthethreadnice
GetExitCodeThread(m_hThread,&m_dwExitCode);
if(m_dwExitCode==STILL_ACTIVE&&bForceKill)
{//强制杀死线程
TerminateThread(m_hThread,DWORD(-1));
m_hThread=NULL;
}
}
returnm_dwExitCode;
}
/**//**
*Stopsthethread.firsttellthethreadtostopitselfandwaitforthethreadtostopitself.
*iftimeoutoccursandthethreadhasn'tstoppedyet,thenthethreadiskilled.
*@paramtimeoutmillisecondstowaitforthethreadtostopitself
*/
DWORDStop(WORDtimeout)
{
Stop(false);
WaitForSingleObject(m_hThread,timeout);//等待一段时间
returnStop(true);
}
/**//**
*suspendsthethread.i.e.thethreadishaltedbutnotkilled.TostartasuspendedthreadcallResume().
*/
DWORDSuspend()
{//挂起线程
returnSuspendThread(m_hThread);
}
/**//**
*resumesthethread.thismethodstartsacreatedandsuspendedthreadagain.
*/
DWORDResume()
{//恢复线程
returnResumeThread(m_hThread);
}
/**//**
*setsthepriorityofthethread.
*@paramprioritythepriority.seeSetThreadPriority()inwindowssdkforpossiblevalues.
*@returntrueifsuccessful
*/
BOOLSetPriority(intpriority)
{//设置线程优先级
returnSetThreadPriority(m_hThread,priority);
}
/**//**
*getsthecurrentpriorityvalueofthethread.
*@returnthecurrentpriorityvalue
*/
intGetPriority()
{//获取线程优先级
returnGetThreadPriority(m_hThread);
}
protected:
/**//**
*子类应该重写此方法,这个方法是实际的工作线程函数
*/
virtualDWORDThreadMethod()=0;
private:
/**//**
*DONToverridethismethod.
*
*thismethodisthe"function"usedwhencreatingthethread.itisstaticsothatway
*apointertoitisavailableinsidetheclass.thismethodcallsthenthevirtual
*methodoftheparentclass.
*/
staticDWORDWINAPIEntryPoint(LPVOIDpArg)
{
CThread*pParent=reinterpret_cast<CThread*>(pArg);
pParent->ThreadMethod();//多态性,调用子类的实际工作函数
return0;
}
private:
HANDLEm_hThread;/**////<ThreadHandle线程句柄
DWORDm_dwTID;///<ThreadID线程ID
LPVOIDm_pParent;///<thispointeroftheparentCThreadobject
DWORDm_dwExitCode;///<ExitCodeofthethread线程退出码
protected:
LPTHREAD_START_ROUTINEm_pThreadFunction;/**////<工作线程指针
BOOLm_runthread;///<线程是否继续运行的标志
};
子类只需要从此类继承并重写ThreadMethod()方法就可以了。
分享到:
相关推荐
自己封装的线程类,可实现启动,暂停,退出线程功能,经过本人验证,非常好用。
用的是::CreateThread 封装了创建线程,停止线程,挂起线程,唤醒线程,设置线程优先性等一般普通功能都有,一个类,直接导入项目就可使用,注意是VC的,不是跨平台的!
用反射实现了对java线程简单的封装,类似c#线程,使用此封装类勿需再次继承Thread类或实现Runnable接口,直接绑定需要使用线程的方法即可,另支持动态传参,如觉着好用请多多支持作者 QQ 359103820 希望能为使用线程...
Windows线程封装类,使用类似ATL的Thunk技术。
C++多线程封装成类使用示例
用VC对线程进行了简单的封装 子类只需要从此类继承并重写ThreadMethod()方法就可以了。
(八)线程--借助 封装类 实现“线程调用带参数方法”
主要类: ----------------------------------------- 一个多线程的简易封装库 - Event:事件类 - MemPool:内存池类 - Mutex:互斥类 - Thread:线程类 - ThreadPool:线程池类 - Task:配合线程使用的线程任务类
C++封装类CWSocket(多线程 非阻塞)vc mfc 一般直接添加就可用,还有超时处理,强大。
实现了各个平台下的线程封装,只需要继承这个基类,实现一个Run方法,就可以实现对象化的线程类,支持Windows Linux MAC
C++封装的一个linux和windows的线程类,一个线程锁类,两个配合使用实现一份多线程的代码适应两个平台
适合初学者!一个基于QT的GPRS定位的线程代码!当然GPRS也给封装好了!
java多线程,对多线程,线程池进行封装,方便使用
自己封装的一个简单的线程类,要用该类只需继承该类重写Run函数既可,方便管理线程的创建关闭等操作。
一个封装好的多线程类,可以在其基础上直接实现自己想要的多线程
多线程md5封装类,用事件通知完成,可直接用于界面中
程序功能如下: 1、对UDP Socket进行封装;...2、接收和发送用同一个端口; 3、采用线程阻塞式接收; 4、程序清晰命了,集合Socket和线程封装,可以用来参考 ---因为同是UDP,则不能重复绑定,所以只能一次。
windows线程之c++封装 class CThread { public: CThread(); virtual ~CThread(); // 启动线程 DWORD Start(void); // 结束线程 void End(void); // 线程执行函数 virtual void Run(void) = 0; ...
mfc中多线程中将子线程的数据输出到界面线程中的封装类
本下载方法采用的是HTTP...首先采用一个主类TC_DownLoad_Main来下载多个文件 然后用一个子类TC_DownLoad来下载单个文件 反复创建这个子类便可以下载多个文件 在子类中用多个线程类TThread1来进行单个文件的多线程下载