C++多线程编程——线程的挂起、唤醒与终止

  • Post author:
  • Post category:其他




(2010-10-11 10:09:04)


标签:




杂谈


分类:


Win32



在线程

创建

并运行后,用户可以对线程执行

挂起



终止

操作.

所谓

挂起

,是指暂停线程的执行

,用户可以通过气候的


唤醒


操作来恢复线程的执行.

线程

终止

是指结束线程的运行.

系统提供了

SuspendThread,ResumeThread和TerminateThread

等函数来实现线程的

挂起、

唤醒

和停止

操作。



SuspendThread



该函数用于挂起线程.语法格式如下:

        DWORD SuspendThread(HANDLE hThread);
        
  • hThread: 表示线程句柄
  • 返回值: 如果函数执行成功,返回值为之前挂起的线程次数;如果函数执行失败,返回值为0xFFFFFFFF



ResumeThread



该函数用于煎炒线程挂起的次数,如果线程挂起的次数为0,将

唤醒

线程.语法格式如下:

        DWORD ResumeThread(HANDLE hThread);
        
  • hThread: 表示线程句柄
  • 返回值: 如果函数执行成功,返回值为之前挂起的线程次数;如果函数执行失败,返回值为0xFFFFFFFF



ExitThread



该函数用于结束当前线程.语法格式如下:

VOID ExitThread(DWORD dwExitCode);
  • dwExitCode: 表示线程退出代码



TerminateThread



该函数用于强制

终止

线程的执行.语法格式如下:

BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode);
  • hThread: 表示待终止的线程句柄
  • dwExitCode: 表示线程退出代码



例子:



线程代码:

              DWORD __stdcall ThreadProc(LPVOID lpParameter)
                {
                        CMultiThreadDlg * pdlg = (CMultiThreadDlg *)lpParameter;
                        pdlg->m_ProCtrl.SetRange32(0,99999);
                        for (int i = 0; i < 99999; i++)
                        {
                                pdlg->m_ProCtrl.SetPos(i);
                        }
                        return 0;
                }
       


创建

线程:

        void CMultiThreadDlg::OnBtCreate()
                {
                        m_hThread = CreateThread(NULL,0,ThreadProc,this,0,NULL);
                }
       

挂起线程:

           void CMultiThreadDlg::OnBtSuspend()
                {
                        SuspendThread(m_hThread);
                }
       

唤醒线程:

           void CMultiThreadDlg::OnBtResume()
                {
                        ResumeThread(m_hThread);
                }
       

终止线程:

           void CMultiThreadDlg::OnBtTerminate()
                {
                        TerminateThread(m_hThread);
                }