多线程简单复习

//线程回调函数

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 执行出错"));

	}

}

你可能感兴趣的:(多线程)