CInternetSession закрыть дескриптор потока

Я пытаюсь создать простое приложение, которое пишет / читает файлы на FTP-сервере.
Я создаю тему

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

Функция foo () создает новую интернет-сессию, подобную этой

      CInternetSession session(_T("Session"));

Но после вызова сеанса CInternetSession (_T («Session»)) поток заканчивается

Есть ли способ это исправить?

1

Решение

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

Например, вы можете использовать интерфейс событий Windows:

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 );

Это будет ждать окончания потока, прежде чем закрыть ручку.

0

Другие решения

Других решений пока нет …