我尝试创建简单的应用程序,在FTP服务器上写入/读取文件。 我创建了一个线程
HANDLE hThread;
unsigned threadID;
hThread = (HANDLE)_beginthreadex( NULL, 0, &foo, NULL, 0,NULL );
CloseHandle( hThread );
函数foo()会像这样创建新的互联网会话
CInternetSession session(_T("Session"));
但是在调用CInternetSession会话(_T(“Session”)之后)线程结束
有没有办法解决它?
答案 0 :(得分:0)
您需要线程函数等待事件或进入循环以防止函数结束。当该函数退出时,线程将会死亡。
例如,您可以使用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)
循环,但事件是我认为在多线程应用程序中表达自己的更清晰的方法。
创建你的线程的线程也不应该是关闭它的线程,除非它为它结束WAITS。在关闭线程句柄之前,看起来好像您正在等待新线程完成。 如果使用事件,那么你可以这样做:
HANDLE hThread;
unsigned threadID;
hThread = (HANDLE)_beginthreadex( NULL, 0, &foo, NULL, 0,NULL );
WaitForSingleObject(hThread, INFINITE);
CloseHandle( hThread );
这将在关闭句柄之前等待线程完成。