zoukankan      html  css  js  c++  java
  • [MFC]线程的挂起与恢复

    实例——线程的挂起与恢复

    关键代码:

    CDemoThreadDlg::CDemoThreadDlg(CWnd* pParent /*=NULL*/)
    	: CDialogEx(CDemoThreadDlg::IDD, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    	pThread=NULL;
    	mThreadParam.nData=0;
    }
    CDemoThreadDlg::~CDemoThreadDlg()
    {
    	if (pThread)
    	{
    		::WaitForSingleObject(pThread->m_hThread,INFINITE);
    		delete pThread;
    		pThread=NULL;
    	}
    }
    
    //启动线程按钮事件
    void CDemoThreadDlg::OnBnClickedButtonStart()
    { 
    	if (pThread)
    	{
    		DWORD exitCode=0;
    		if (::GetExitCodeThread(pThread->m_hThread,&exitCode))
    		{
    			if (exitCode == STILL_ACTIVE)
    			{
    				AfxMessageBox(L"线程已经启动。");
    				return;
    			}  
    		}
    	}
    	mThreadParam.hWnd=m_hWnd;
    	pThread=AfxBeginThread(ThreadFun,&mThreadParam,THREAD_PRIORITY_ABOVE_NORMAL,0,CREATE_SUSPENDED);
    	pThread->m_bAutoDelete=FALSE;
    	pThread->ResumeThread();
    }
    //线程函数
    UINT ThreadFun(LPVOID pParam)
    { 
    	THREAD_PARAM* pThreadParam=(THREAD_PARAM*)pParam;
    	for (int i=0;i<50;i++)
    	{
    		pThreadParam->nData++;
    		::PostMessage(pThreadParam->hWnd,WM_MSG,0,0);
    		Sleep(100);
    	}
    	return 0;
    }
    //挂起线程按钮事件
    void CDemoThreadDlg::OnBnClickedButtonSuspend()
    { 
    	if (pThread)
    	{
    		pThread->SuspendThread();
    		/*
    		DWORD SuspendThread( );
    		返回值:如果成功,则返回线程原来的挂起计数值;否则返回0xFFFFFFFF。
    		说明:	增加当前线程的挂起计数。如果线程的挂起计数大于零,则该线程将不被执行。线程可以通过调用ResumeThread成员函数恢复执行。
    		*/
    	}
    }
    //恢复线程按钮事件
    void CDemoThreadDlg::OnBnClickedButtonResume()
    { 
    	if (pThread)
    	{
    		pThread->ResumeThread();
    		/*
    		DWORD ResumeThread( );
    		返回值:如果成功,则返回线程的原挂起计数值;否则返回0xFFFFFFFF。如果返回值为零,则表示当前线程没有被挂起。如果返回值为1,线程被挂起,但是即将重新启动。任何大于1的返回值都表明线程将继续挂起。
    		说明:	调用这个函数以使被SuspendThread成员函数所挂起的线程恢复执行,或者使用CREATE_SUSPENDED标志创建的线程恢复执行。当前线程的挂起计数被减小1。如果挂起计数被减小到0,线程将恢复执行;否则线程继续被挂起。
    		*/
    	}
    }


    结果图:

  • 相关阅读:
    Windows程序设计03:创建窗口类
    Android学习笔记19:ImageView实现图片适屏与裁剪
    设计模式01:统一建模语言UML基础知识
    串口通信与编程01:串口基础知识
    Windows程序设计01:在VS2008上新建Windows应用程序项目
    设计模式02:面向对象设计原则
    Windows程序设计02:永恒的Hello World
    Android学习笔记20:Http协议及Java Web编程
    Android学习笔记18:自定义Seekbar拖动条式样
    从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3049827.html
Copyright © 2011-2022 走看看