Windows线程可以分为5种:工作者线程、消息线程、窗口线程、单元线程、带线程池的线程
1.工作者线程
class WorkThread
{
public:
static DWORD WINAPI ThreadProc(void *p);
int DoWork();
};
DWORD WINAPI WorkThread::ThreadProc(void *p)
{
cout<<"Hello World.."<<endl;
return 0;
}
int WorkThread::DoWork()
{
DWORD dw;
HANDLE hThread;
hThread=::CreateThread(NULL,0,ThreadProc,NULL,0,&dw);
::CloseHandle(hThread);
::Sleep(1000);
return 0;
}
int main(int argc, char* argv[])
{
WorkThread wt;
wt.DoWork();
return 0;
}
2.消息线程
#define MYMESSAGE WM_USER+500
#define MYCLOSE WM_USER+501
volatile BOOL m_isEnd;
class WorkThread
{
public:
static DWORD WINAPI ThreadProc(void *p);
int DoWork();
WorkThread();
~WorkThread();
int CloseWorkThread();
private:
DWORD m_dwThreadId;
HANDLE m_hThread;
};
WorkThread::WorkThread()
{
m_isEnd=FALSE;
m_hThread=::CreateThread(NULL,0,ThreadProc,NULL,0,&this->m_dwThreadId);
}
int WorkThread::CloseWorkThread()
{
::PostThreadMessage(this->m_dwThreadId,MYCLOSE,0,0);
return 0;
}
WorkThread::~WorkThread()
{
::CloseHandle(m_hThread);
::PostThreadMessage(this->m_dwThreadId,WM_CLOSE,0,0);
}
DWORD WINAPI WorkThread::ThreadProc(void *p)
{
MSG msg;
while(::GetMessage(&msg,NULL,0,0))
{
switch(msg.message)
{
case MYMESSAGE:
cout<<"Hello World...."<<endl;
break;
case MYCLOSE:
m_isEnd=TRUE;
break;
default:
break;
}
}
return 0;
}
int WorkThread::DoWork()
{
::PostThreadMessage(this->m_dwThreadId,MYMESSAGE,0,0);
return 0;
}
int main(int argc, char* argv[])
{
WorkThread wt;
while(!m_isEnd)
{
wt.DoWork();
wt.CloseWorkThread();
::Sleep(1000);
}
return 0;
}