WEB开发网
开发学院软件开发VC 如何让程序自动管理线程 阅读

如何让程序自动管理线程

 2010-08-15 20:46:26 来源:WEB开发网   
核心提示:引言多线程是一种很好的程序机制,使用线程可以充分的利用电脑资 源,如何让程序自动管理线程,进行并行的业务处理,不过好的东西总有它的不足,而我 们仅要做的就是把线程函数名和线程参数传给ThreadManager类,于是我们定义该 类构造函数为:ThreadManager(ThreadPrc threadpro,LPVOI

引言

多线程是一种很好的程序机制,使用线程可以充分的利用电脑资 源,进行并行的业务处理。不过好的东西总有它的不足。线程是好,不过滥用, 或管理不当就会造成线程混乱,内存漏洞,造成电脑速度变慢,反应迟钝。

想法

于是有人提出能不能让线程自己管理自己,把这复杂的工作 交给电脑来处理。笔者经过多年的实践,终于用VC++实现了这一目的。

大家知道在VC++中我们可以用CreateThread创建一个线程,该函数返回这线程 的Handle,以后我们就可以用这个Handle来管理这个线程的。于是我们可以做一 个类名为ThreadManager,来管理这些Handle,并随时监控这些线程的状态。

总的思想就是这样,不过为了方便使用,我们最好把这个类封装成DLL的 形式,这样以后我们在任何程序中都可以很方便的用该类来管理线程了(当然如果 你有兴趣,也可以用COM模型来实现)。

实现

因为我们要把一切工 作全交给ThreadManager,所以线程的创建,监控,删除都将在该类中实现,而我 们仅要做的就是把线程函数名和线程参数传给ThreadManager类,于是我们定义该 类构造函数为:

ThreadManager(ThreadPrc threadpro,LPVOID pParam);

该类还要能启动线程,于是我们又定义一个启动函数:

RunThread();

另外我们有时还要能获得线程的Handle,于 是又定义一个函数:

HANDLE GetThreadHandle();

而该类唯 一的成员参数就是Handle:

HANDLE m_Handle;

于是 ThreadManager定义如下:

typedef DWORD (WINAPI *ThreadPro) (LPVOID);
class CThreadManager : public CObject
{
   DECLARE_DYNAMIC( CThreadManager ) 
public:
   CThreadManager( ThreadPrc threadpro, LPVOID pParam);
   ~CThreadManager();
  CBOOL RunThread();
  HANDLE GetThreadHandle() const { return( m_Handle ); };
private:
   HANDLE m_Handle;
};

1 2 3 4  下一页

Tags:如何 程序 自动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接