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

posted on 2010-11-28 14:49  一颗麦粒  阅读(191)  评论(0编辑  收藏  举报

导航