如何正确的创建线程,终了线程(2)
2013-10-11 14:51
176 查看
上一讲我们说了Win32下如何创建线程,这一讲我们来说线程是如何终止的。
2>线程是如何终止的呢?
线程函数返回
线程通过调用ExitThread函数“杀死”自己
同一进程或另一进程中调用TerminateThread函数
包含线程的进程终止
线程函数返回
设计线程函数时,应该确保线程结束时,线程函数就返回。这是确保线程函数所有资源释放的唯一途径。那么函数返回可以确保哪些资源被正确释放呢?
线程中所创建的所有C++对象都通过其析构函数被正确释放。
操作系统正确释放线程栈。
操作系统把线程退出码设为线程返回值。(内核对象维护)
操作系统减少线程内核对象的引用计数。
线程通过调用ExitThread函数“杀死”自己
函数终止线程运行,并使操作系统清理该线程中使用的操作系统资源,而C++资源(C++对象)不会被释放。
函数原型:
VOID ExitThread(
DWORD dwExitCode // exit code for this thread
);
但是可以通过设置参数dwExitCode 告诉操作系统线程的退出码设为什么。
我们可以通过GetExitCodeThread函数获取线程退出码,来明白线程退出时的状况。
※如何C/C++代码不要调用ExitThread(Windows函数),应该使用C++运行时库函数__endthreadex
同一进程或另一进程中调用TerminateThread函数
函数能“杀死”任何线程,调用TerminateThread杀死线程时,参数dwExitCode 变成线程退出码。线程内核对象的引用计数减少。线程拥有的堆栈直到拥有该线程的进程终止才释放。
函数原型:
BOOL TerminateThread(
HANDLE hThread, // handle to thread
DWORD dwExitCode // exit code
);
包含线程的进程终止
ExitProcess和TerminateProcess也可以终止线程的运行,这些函数会终止该进程中所有的运行的线程。所使用的资源会被清理。
※线程状态的侦测:
BOOL GetExitCodeThread(
HANDLE hThread, // handle to the thread
LPDWORD lpExitCode // termination status
);
lpExitCode 指向线程函数的退出码,线程未退出时,指向STILL_ACTIVE(0x103)值。
2>线程是如何终止的呢?
线程函数返回
线程通过调用ExitThread函数“杀死”自己
同一进程或另一进程中调用TerminateThread函数
包含线程的进程终止
线程函数返回
设计线程函数时,应该确保线程结束时,线程函数就返回。这是确保线程函数所有资源释放的唯一途径。那么函数返回可以确保哪些资源被正确释放呢?
线程中所创建的所有C++对象都通过其析构函数被正确释放。
操作系统正确释放线程栈。
操作系统把线程退出码设为线程返回值。(内核对象维护)
操作系统减少线程内核对象的引用计数。
线程通过调用ExitThread函数“杀死”自己
函数终止线程运行,并使操作系统清理该线程中使用的操作系统资源,而C++资源(C++对象)不会被释放。
函数原型:
VOID ExitThread(
DWORD dwExitCode // exit code for this thread
);
但是可以通过设置参数dwExitCode 告诉操作系统线程的退出码设为什么。
我们可以通过GetExitCodeThread函数获取线程退出码,来明白线程退出时的状况。
※如何C/C++代码不要调用ExitThread(Windows函数),应该使用C++运行时库函数__endthreadex
同一进程或另一进程中调用TerminateThread函数
函数能“杀死”任何线程,调用TerminateThread杀死线程时,参数dwExitCode 变成线程退出码。线程内核对象的引用计数减少。线程拥有的堆栈直到拥有该线程的进程终止才释放。
函数原型:
BOOL TerminateThread(
HANDLE hThread, // handle to thread
DWORD dwExitCode // exit code
);
包含线程的进程终止
ExitProcess和TerminateProcess也可以终止线程的运行,这些函数会终止该进程中所有的运行的线程。所使用的资源会被清理。
※线程状态的侦测:
BOOL GetExitCodeThread(
HANDLE hThread, // handle to the thread
LPDWORD lpExitCode // termination status
);
lpExitCode 指向线程函数的退出码,线程未退出时,指向STILL_ACTIVE(0x103)值。
相关文章推荐
- 在 Windows 7 下如何使用 native c++ 正确创建线程
- 如何正确的创建线程,终了线程(1)
- 如何创建并运行java线程
- 如何创建线程
- Java 在给定路径上创建文件,所在文件夹不存在时,如何正确创建。
- Executor内部如何创建线程?
- Java并发编程:如何创建线程
- Java并发编程:如何创建线程?
- 如何正确的关闭 MFC 线程
- java并发编程---如何创建线程以及Thread类的使用
- 如何:创建和终止线程
- 如何:创建和终止线程(C# 编程指南)
- 如何正确停止线程
- 如何正确的关闭 MFC 线程
- MySQL索引,如何正确创建MySQL索引,如何判断是否需要创建索引
- 02 如何创建线程 线程并发
- 如何创建并运行java线程
- 2、Java并发编程:如何创建线程
- 下列哪些语句关于内存回收的说明是正确的? (b ) A、 程序员必须创建一个线程来释放内存
- 如何创建并运行 java 线程