FDLib中的VC++的线程类


 
    现在java和C#等编程语言都提供了线程类,大大方便了多线程程序的开发。而我1995年

至2001年这段期间使用C++的时候,VC却没有提供很好的线程类,只能使用Win32的SDK的线

程函数,开发多线程系统相当不容易。1999年的时候,随着自己开发经验的逐渐积累,以及

对面向对象思想了解的加深,开发了FDLib系列C++的工具类,并进行了很好的归纳和分类,

封装成dll和lib,并在此后的项目开发中不断的进行充实和完善。FDLib在很大程度上简化

了C++的开发,使我的开发速度和开发质量都有了很大的提高。而我的技术水平也从那时候

开始有了质的飞跃。
 
    值得一提的是,当时在asia.com时的一个部下,从我这儿得到了FDLib的开发包。离开

asia.com到其它公司之后,仍然把FDLib当作一个秘密武器在工作中使用,结果工作成绩非

常突出,很快就得到提升,现在已经在一个公司当技术总监了。另外一个部下,跳槽到华友

世纪(一个排名很靠前的SP公司)后,把我当年用VC开发的一个短信网关客户端也给带到了华

友,时隔6,7年了,据说现在还运行在华友的服务器上。
 
    闲话少说,现在给大家介绍一下FDLib中的线程类FDThread。过了这么多年,不知道对

别人还有没有帮助。
 
1.头文件
#if !defined(AFX_THREAD_H__528A75A7_BCED_11D3_9FC1_0080C735358E__INCLUDED_)
#define AFX_THREAD_H__528A75A7_BCED_11D3_9FC1_0080C735358E__INCLUDED_
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Thread.h : header file
//
 
/
// CFDThread thread
 
class CFDThread
{
public:
     CFDThread();
     virtual ~CFDThread();
 
// Operations
public:
     int Start();
     void Stop();
     void SetPriority(int nPriority){SetThreadPriority(m_hThread, nPriority);}
     void Terminate();
     BOOL IsRunning() {return m_bIsRunning;}
 
protected:
     virtual int ThreadProc(){return 0;}
     virtual void StopProc(){}
     virtual void InitProc(){}
     virtual void ExitProc(){}
 
private:
     friend int MainThreadProc(CFDThread *pFDThread);

private:
     HANDLE m_hThread;
     UINT m_nThreadID;
     BOOL m_bIsRunning;    
};
 
/
 
#endif // !defined

(AFX_THREAD_H__528A75A7_BCED_11D3_9FC1_0080C735358E__INCLUDED_)


 
 
2.CPP文件
// Thread.cpp : implementation file
//
 
#include "stdafx.h"
#include "FDThread.h"
#include "FDCoreFunction.h"
 
/
// CFDThread
 
CFDThread::CFDThread()
{
     m_hThread = NULL;
     m_nThreadID = 0;
     m_bIsRunning = false;
}
 
CFDThread::~CFDThread()
{
     Terminate();
}
 
int CFDThread::Start()
{
     if(m_hThread != NULL)
     {
         return -1;
     }
 
     DWORD dwFlag = 0;
 
     m_hThread = (void*)_beginthreadex(NULL, 0, (unsigned(__stdcall*)(void*))

MainThreadProc, this, dwFlag, &m_nThreadID);
 
     if(m_hThread == NULL)
     {
         return errno;
     }
 
     return 0;
}
 
void CFDThread::Stop()
{
     StopProc();
 
     while(m_bIsRunning == true)
     {
         FDSleep(100);
     }
}
 
void CFDThread::Terminate()
{
     if(m_hThread != NULL)
     {
         if(TerminateThread(m_hThread, -1) == FALSE)
              return;
         m_hThread = NULL;
         m_nThreadID = 0;
     }
}
 
int MainThreadProc(CFDThread *pFDThread)
{
     pFDThread->InitProc();
 
     pFDThread->m_bIsRunning = true;
     int nExitCode = pFDThread->ThreadProc();
     pFDThread->m_bIsRunning = false;
 
     CloseHandle(pFDThread->m_hThread);
     pFDThread->m_hThread = NULL;
     pFDThread->m_nThreadID = 0;
    
     pFDThread->ExitProc();
 
     return nExitCode;
}


 
3.使用方法介绍
1)从CFDThread派生一个class,该class是实际的线程类
2)重载ThreadProc和StopProc
其中ThreadProc是线程体,一般写法如下:
int ThreadProc()
{
     while(m_bCanExit == FALSE)
     {
          //……
          Sleep(10);
     }
     return 0;
}


StopProc设置线程自然终止的条件,一般写法如下:
void StopProc()
{
     m_bCanExit = TRUE;
}

3)InitProc可以重载,在线程刚启动时被调用
4)ExitProc可以重载,在线程自然退出前被调用
5)成员介绍
 方法                      描述
Start                  开始线程
Stop                  自然终止线程,直到线程终止才退出
SetPriority         设置线程优先级
Terminate          强制终止线程

 

 

ZZ:http://blog.csdn.net/dyxtb/archive/2007/06/26/1667747.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值