2013-06-10 5 views
1

FTP 서버에서 파일을 쓰거나 읽는 간단한 응용 프로그램을 만들려고합니다. 내가 스레드에게CInternetSession 닫기 스레드 핸들

HANDLE hThread; 
    unsigned threadID; 
    hThread = (HANDLE)_beginthreadex(NULL, 0, &foo, NULL, 0,NULL);  
    CloseHandle(hThread); 

함수 foo는 생성()이

 CInternetSession session(_T("Session")); 

같은 새로운 인터넷 세션을 생성하지만 CInternetSession 세션 (_T ("세션")) 호출 한 후 스레드는

인가 종료 그것을 고칠 방법이 있습니까?

답변

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) 루프가 있지만 이벤트는 내가 생각하는 다중 스레드 응용 프로그램에서 자신을 표현하는 명확한 방법입니다.

또한 스레드를 생성 한 스레드는 끝내기를 기다리지 않는 한 스레드를 닫은 스레드가 아니어야합니다. 스레드의 핸들을 닫기 전에 새 스레드가 끝나기를 기다리는 것처럼 보이지 않습니다. 다시 이벤트를 사용하는 경우 당신은이 작업을 수행 할 수 : 스레드가 핸들을 닫기 전에 끝날 때까지 기다립니다

HANDLE hThread; 
unsigned threadID; 
hThread = (HANDLE)_beginthreadex(NULL, 0, &foo, NULL, 0,NULL); 
WaitForSingleObject(hThread, INFINITE); 
CloseHandle(hThread); 

합니다.

+1

이벤트 API를 사용하지 않아도 작동합니다. _beginthreadex 뒤에 WaitForSingleObject (hThread, INFINITE) 만 추가했습니다. 답변 해 주셔서 감사합니다. – alinaish

+0

@alinaish - 좋습니다. WaitForSingleObject는 "이벤트 API"의 일부입니다. :) 답변으로 표시 할 수 있다면 어떻게 도움이 되었는가를 생각해 봅니다. – Dennis