《Win32多线程程序设计》学习笔记 第5章 不要让线程成为脱缰野马
利用terminatethread结束一个线程
不建议使用这个函数
Terminates a thread.
BOOL WINAPI TerminateThread(
HANDLE hThread, //欲结束线程的handle
DWORD dwExitCode //垓线程的结束代码
);
返回值: 成功返回TRUE
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");
}
printf("received request to terminate");
}
使用SuspendThread挂起一个线程
允许有人调用它来挂起一个指定的线程,知道有人调用ResumeThread才能恢复醒来。
Suspends the specified thread.
DWORD WINAPI SuspendThread(
HANDLE hThread //欲被挂起的线程
);
返回值:如果成功,返回线程目前的挂起次数。失败,返回0xffffffff。
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
);
DWORD WINAPI ResumeThread(
__in HANDLE hThread
);