如何让程序自动管理线程
2010-08-15 20:46:26 来源:WEB开发网下面介绍线程ThreadTaskpro(); 该线程最主要的目的就是 调用ThreadTask的CloseThreadHandles()函数,实现如下:
DWORD WINAPI ThreadTaskpro( LPVOID pParam )
{
HANDLE hCurrentThread = GetCurrentThread();
//获得该线程句柄
SetThreadPriority( hCurrentThread, THREAD_PRIORITY_LOWEST );
//设为最低
while ( ThreadTask::GetThreadTask().m_bKeepGoing )
{
Sleep(500);
//休息500mms
ThreadTask::GetThreadTask().CloseThreadHandles();
}
SetThreadPriority( hCurrentThread, THREAD_PRIORITY_NORMAL );
return( 0 );
}
ThreadTask类到这就介绍完了,下 面我们看看ThreadManager类的实现,其实它的工作已很小,就是启动要管理的线 程(在构造函数中完成),并控制ThreadTask类。具体实现:
ThreadManager::ThreadManager(ThreadPro threadpro, LPVOID pParam)
{
DWORD nThreadId = 0;
_ASSERTE( ThreadTask::GetThreadTask().IsValid() );
//运行ThreadTask类
m_Handle = (HANDLE)::CreateThread(NULL,0,threadpro,(LPVOID) pParam,0,&nThreadId );
//创建要管理的线程,并返回句柄
if ( ThreadTask::GetThreadTask().m_bKeepGoing )
{
//如果ThreadTask运行了的话
ASSERT( m_Handle );
ThreadTask::GetThreadTask().AddHandle( m_Handle );
//把句柄加入ThreadTask类中,以便管理
}
}
ThreadManager::~ThreadManager()
{
}
BOOL ThreadManager::RunThread()
{
//运行线程
return( ::ResumeThread( m_Handle ) != 0xFFFFFFFF );
}
整在机制就 介绍完了。
使用方法
使用方法相当简单,比如说,我要运行进程 MyThread1,并传入参数m_pro,只要用以下代码就可以了:
ThreadManager ThreadManager( &MyThread1, (LPVOID)m_pro );
ThreadManager.RunThread();
就可以了,用这种方法创 的线程,会自动由ThreadManager类管理,并在完成的工作时,自动释放线程资源 。 我做了一个示例,大家可以试着运行一下。
本文配套源码
更多精彩
赞助商链接