📄 threadtask.cpp
字号:
// ThreadTask.cpp: implementation of the ThreadTask class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "managerthread.h"
#include "ThreadTask.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
class CHandle : public CObject
{
DECLARE_DYNAMIC( CHandle )
public:
HANDLE m_ThreadHandle;
};
IMPLEMENT_DYNAMIC( CHandle, CObject )
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
DWORD WINAPI ThreadTaskpro(LPVOID pParam);
ThreadTask::ThreadTask()
{
m_bKeepGoing = TRUE;
DWORD nThreadId = 0;
m_Handle = (HANDLE)::CreateThread(NULL,0,ThreadTaskpro,0,0,&nThreadId );
}
void ThreadTask::AddHandle( CONST HANDLE cHandle )
{
CHandle *pHandle = new CHandle;
pHandle->m_ThreadHandle = cHandle;
m_ObList.AddTail( pHandle );
}
void ThreadTask::CloseThreadHandles()
{
if ( m_ObList.GetCount() )
{
POSITION pos1, pos2;
CHandle *pHandle = (CHandle *)NULL;
DWORD dwExitCode = 0L;
for( pos1=m_ObList.GetHeadPosition(); (pos2=pos1)!=POSITION(NULL); )
{
pHandle = DYNAMIC_DOWNCAST( CHandle, m_ObList.GetNext( pos1 ) );
VERIFY( ::GetExitCodeThread( pHandle->m_ThreadHandle, &dwExitCode ) );
if ( dwExitCode != STILL_ACTIVE )
{
m_ObList.RemoveAt( pos2 );
VERIFY( ::CloseHandle( pHandle->m_ThreadHandle ) );
delete pHandle;
pHandle = (CHandle *)NULL;
AfxMessageBox("一个线程已被关闭",MB_ICONINFORMATION);
}
}
}
}
ThreadTask::~ThreadTask()
{
}
ThreadTask & ThreadTask::GetThreadTask()
{
static ThreadTask Taker;
return (Taker) ;
}
BOOL ThreadTask::IsValid()
{
BOOL bValid_Status = FALSE;
if ( (this != NULL)
&& AfxIsValidAddress( this, sizeof( ThreadTask ) )
)
bValid_Status = TRUE;
return( bValid_Status );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -