多线程简单复习

//线程回调函数
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 执行出错"));
	}
}
posted @ 2012-03-04 00:15  瓜蛋  阅读(298)  评论(0编辑  收藏  举报