如何让程序自动管理线程
2010-08-15 20:46:26 来源:WEB开发网引言
多线程是一种很好的程序机制,使用线程可以充分的利用电脑资 源,进行并行的业务处理。不过好的东西总有它的不足。线程是好,不过滥用, 或管理不当就会造成线程混乱,内存漏洞,造成电脑速度变慢,反应迟钝。
想法
于是有人提出能不能让线程自己管理自己,把这复杂的工作 交给电脑来处理。笔者经过多年的实践,终于用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;
};
更多精彩
赞助商链接