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
    );

  • 相关阅读:
    Leetcode:50. Pow(x, n)
    loj 2759「JOI 2014 Final」飞天鼠
    bzoj 3569 DZY Loves Chinese II
    CF407D Largest Submatrix 3
    bzoj 3837 pa2013 Filary
    bzoj 4722 由乃
    CF1105E Helping Hiasat
    loj 6043「雅礼集训 2017 Day7」蛐蛐国的修墙方案
    luogu P2605 [ZJOI2010]基站选址
    luogu P3226 [HNOI2012]集合选数
  • 原文地址:https://www.cnblogs.com/kwliu/p/2195913.html
Copyright © 2011-2022 走看看