我们来看一个常见的基本问题:父线程退出后, 子线程会退出么?
我不喜欢人云亦云, 一贯主张大胆假设, 小心求证,貌似有点实证主义色彩了, 不多说, 直接看程序:
- #include <stdio.h>
- #include <windows.h>
- DWORD WINAPI ThreadFun(LPVOID pM)
- {
- while(1)
- {
- printf("子线程的线程ID号为:%d\n", GetCurrentThreadId());
- }
- return 0;
- }
- int xxmain()
- {
- printf("main thread\n");
- HANDLE handle = CreateThread(NULL, 0, ThreadFun, NULL, 0, NULL);
- CloseHandle(handle);
- Sleep(3000);
- return 0;
- }
我们继续来看:
- #include <stdio.h>
- #include <windows.h>
- DWORD WINAPI ThreadFun1(LPVOID pM)
- {
- while(1)
- {
- printf("子线程的线程ID号为:%d\n", GetCurrentThreadId());
- }
- return 0;
- }
- DWORD WINAPI ThreadFun2(LPVOID pM)
- {
- HANDLE handle = CreateThread(NULL, 0, ThreadFun1, NULL, 0, NULL);
- CloseHandle(handle);
- Sleep(3000);
- return 0;
- }
- int main()
- {
- printf("main thread\n");
- HANDLE handle = CreateThread(NULL, 0, ThreadFun2, NULL, 0, NULL);
- CloseHandle(handle);
- while(1);
- return 0;
- }
所以, 本文开头那个问题, 不能笼统回答, 要视情况而定。而且, 我在linux上也验证过, 也是这样的