多线程简单复习
//线程回调函数 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