多线程简单复习
//线程回调函数
DWORD __stdcall ThreadPoc(PVOID pParam)
{
Sleep(10000);
AfxMessageBox(_T("线程终止了"));
return 10;
}
void CMutiThreadStudyDlg::OnBnClickedStart()
{
// 创建线程进执行
m_hThread=CreateThread (NULL,0,ThreadPoc,NULL,0,NULL);
//创建线程后会返回一个线程句柄,线程的使用记数为2,
//在你得到线程句柄后如果不对线程进行其他操作的话就通过CloseHandle()关闭该句柄,
//同时线程记数-1。线程执行退出时,记数也会减1,记数为0时,操作系统会释放线程的句柄资源,因此,大多数情况下,创建完线程后都会关闭线程句柄。跟多详细信息可以参考《windows核心编程》
// CloseHandle((HANDLE)m_hThread);
}
void CMutiThreadStudyDlg::OnBnClickedButton2()
{
// TODO: 线程是否还在执行
DWORD dwReturn=WaitForSingleObject((HANDLE)m_hThread,500);
switch(dwReturn)
{
case WAIT_TIMEOUT:
AfxMessageBox(_T("线程还没有结束"));
break;
case WAIT_OBJECT_0:
AfxMessageBox(_T("线程已经结束"));
break;
case WAIT_FAILED :
AfxMessageBox(_T("失败"));
break;
default:
AfxMessageBox(_T("others"));
break;
}
}
void CMutiThreadStudyDlg::OnBnClickedButton3()
{
//得到线程回调函数返回值
DWORD dwExitCode=0;;
int ret=::GetExitCodeThread((HANDLE)m_hThread,&dwExitCode);
if(ret!=0)
{
CString csOutMsg;
switch(dwExitCode)
{
case STILL_ACTIVE:
AfxMessageBox(_T("线程还没有返回"));
break;
default:
csOutMsg.Format(_T("线程返回成功 %d"),dwExitCode);
AfxMessageBox(csOutMsg);
break;
}
}
else
{
AfxMessageBox(_T("GetExitCodeThread 执行出错"));
}
}
本文章转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232

浙公网安备 33010602011771号