多线程简单复习

简介: //线程回调函数 DWORD __stdcall ThreadPoc(PVOID pParam) { Sleep(10000); AfxMessageBox(_T("线程终止了")); return 10; } void CMutiThreadStudyDlg::OnBnClic...
//线程回调函数
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 执行出错"));
	}
}
相关文章
|
6月前
|
关系型数据库 MySQL 编译器
C++进阶 多线程相关(下)
C++进阶 多线程相关(下)
33 0
|
6月前
|
安全
多线程【进阶版】(中)
多线程【进阶版】
30 0
|
6月前
多线程【进阶版】(上)
多线程【进阶版】
46 0
|
6月前
|
安全 Java 调度
多线程【进阶版】(下)
多线程【进阶版】
34 0
|
22天前
|
安全 算法 Java
多线程知识点总结
多线程知识点总结
35 3
|
5月前
|
Java 调度 C++
2 线程基础知识复习
2 线程基础知识复习
|
6月前
|
算法 Ubuntu C++
[总结] C++ 知识点 《四》多线程相关
[总结] C++ 知识点 《四》多线程相关
|
7月前
|
Java 程序员 调度
多线程(初阶)——多线程基础
多线程(初阶)——多线程基础
59 0
|
8月前
|
存储 安全 Java
3.多线程(进阶)(二)
3.多线程(进阶)(二)
32 0
|
8月前
|
存储 安全 算法
3.多线程(进阶)(三)
3.多线程(进阶)(三)
32 0

热门文章

最新文章

相关课程

更多