您需要您的线程函数等待事件或进入循环以防止函数结束。当该函数退出时,线程将死亡。
例如,您可以使用 windows 事件 API:
void foo(){
// The Event exitSessionEvent must be declared somewhere where the controlling
// thread can access it. This might be a global event for example (in a namespace).
// You must initialise it using CreateEvent.
CInternetSession session(_T("Session"));
// ... do some stuff ....
WaitForSingleObject(exitSessionEvent, INFINITE);
session.Close(); //Done so cleanup
}
现在线程函数将不会退出,直到事件“exitSessionEvent”被设置(由其他人)。
您也可以使用某种标志并有一个while(flag)
循环,但我认为事件是在多线程应用程序中表达自己的更清晰的方式。
此外,创建您的线程的线程不应该是关闭它的线程,除非它等待它结束。在关闭线程句柄之前,您似乎没有等待新线程完成。同样,如果使用事件,那么您可以这样做:
HANDLE hThread;
unsigned threadID;
hThread = (HANDLE)_beginthreadex( NULL, 0, &foo, NULL, 0,NULL );
WaitForSingleObject(hThread, INFINITE);
CloseHandle( hThread );
这将在关闭句柄之前等待线程完成。