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,线程将恢复执行;否则线程继续被挂起。
    		*/
    	}
    }


    结果图:

  • 相关阅读:
    解决了Excel的一个貌似很奇怪的问题~~~
    关闭子页面,刷新父页面
    动态控制DataGrid中的TextBox的状态及输入值!!
    C#对Oracle BLOB字段的写入读取方法
    谈恋爱,好累...
    可移植,可扩展高效Proactor模式
    When are asynchronous file writes not asynchronous...
    [转]How to support 10,000 or more concurrent TCP connections
    [转]Creating a forwarding dll
    [转]非金钱激励员工的108种手段
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3049827.html
Copyright © 2011-2022 走看看