2013-06-10 9 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 ("Session")) концы нити

Is есть способ исправить это?

ответ

0

Вам нужна функция вашего потока, чтобы ждать события или ввести цикл, чтобы предотвратить завершение функции. Когда эта функция выйдет, поток будет умирать.

Например, вы можете использовать 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

Он работает даже без использования Event API. Я только добавил WaitForSingleObject (hThread, INFINITE) после _beginthreadex. Спасибо за ответ. – alinaish

+0

@alinaish - Отлично. WaitForSingleObject является частью «Event API», хотя :) Видя, как это помогло вам, я был бы признателен, если бы вы могли отметить это как ответ. – Dennis