• 多线程简单复习


    //线程回调函数
    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 执行出错"));
    	}
    }
    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    mysql 需要掌握的重点
    Java基础知识之常见关键字以及概念总结
    abstract类中method
    java异常继承何类,运行时异常与一般异常的区别
    Java关键字final、static使用总结
    JAVA读取XML文件
    关于ApplicationContext的初始化
    web.xml配置详解
    maven javaProject打包发布成服务
    Spring Boot Actuator 配置和应用
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2378895.html
Copyright © 2020-2023  润新知