zoukankan      html  css  js  c++  java
  • 《Win32多线程程序设计》学习笔记 第5章 不要让线程成为脱缰野马

    利用terminatethread结束一个线程

    不建议使用这个函数

    Terminates a thread.

    BOOL WINAPI TerminateThread(
      HANDLE hThread,   
    //欲结束线程的handle
      DWORD dwExitCode  //垓线程的结束代码
    );

    返回值: 成功返回TRUE

    该函数是一个危险的函数,不到万不得以不使用它。TerminateThread强迫线程结束,手段激烈,线程没有机会在结束前清理自己。目标线程的堆栈也没有释放,有可能引起内存泄露。任何与此线程有关的DLLs也么有机会获得“线程解除附着”的通知。如果此线程正进入一个critical section中,那么这个critical section 将永远处于锁定状态。

     设立一个标记(event)来结束

     在代码中设置一个标记,利用其职要求线程结束自己。

    if(WaitForSingleObject(hExitEvent,0)!=WAIT_TIMEOUT){
      printf(
    "received request to terminate");
    }

    使用SuspendThread挂起一个线程

     允许有人调用它来挂起一个指定的线程,知道有人调用ResumeThread才能恢复醒来。

    Suspends the specified thread. 

    DWORD WINAPI SuspendThread(
      HANDLE hThread     
    //欲被挂起的线程
    );
    返回值:如果成功,返回线程目前的挂起次数。失败,返回0xffffffff。

    该函数有可能会因使用不慎引起死锁。

    唤醒一个挂起的线程ResumeThread

    Decrements a thread's suspend count. When the suspend count is decremented to zero, the execution of the thread is resumed.

    DWORD WINAPI ResumeThread(
      __in          HANDLE hThread
    );

  • 相关阅读:
    java的一些基本概念──JDK 、j2se 、j2sdk...
    shell函数的调用执行
    ICE第三方包简介及安装&ICE安装(linux)
    http状态码
    Grep命令学习笔记(转)
    STL map用法详解
    ubuntu下安装subversion客户端
    linux下安装Tomcat及设置JSP环境
    ICE总结
    struts开发
  • 原文地址:https://www.cnblogs.com/kwliu/p/2195913.html
Copyright © 2011-2022 走看看