C ++ WInApi тема - PullRequest
       24

C ++ WInApi тема

2 голосов
/ 15 февраля 2012

на кнопке "пуск" я делаю нить

HANDLE  hThread1;
case butStart:
hThread1=CreateThread(NULL, 0, func_pressF1, NULL, NULL, NULL);
break;
case butStop:
//code
break;

как мне освободить тему при остановке кнопки? Я думаю, с этим функции могут помочь

VOID WINAPI ExitThread(
 __in DWORD dwExitCode
 );

 BOOL WINAPI GetExitCodeThread(
 __in HANDLE hThread,
 __out LPDWORD lpExitCode
 );

но я не знаю, что мне здесь написать __out LPDWORD lpExitCode. Может быть, кто-то может написать код для моего примера

Ответы [ 4 ]

4 голосов
/ 15 февраля 2012

Вы должны сообщить своему потоку о выходе, используя какой-либо механизм, например, событие.После этого основной поток должен присоединиться к потоку, а затем получить код выхода (при необходимости).Никогда не следует принудительно завершать поток, поскольку ресурсы могут не освободиться, а мьютексы могут зайти в тупик (например, если он принадлежит потоку).

0 голосов
/ 15 февраля 2012

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

0 голосов
/ 15 февраля 2012

__out LPDWORD lpExitCode означает, что вы предоставляете указатель на DWORD, в котором функция поместит код выхода для вас, как второе возвращаемое значение!

0 голосов
/ 15 февраля 2012

Попробуйте WaitForSingleObject дождаться завершения потока, GetExitCodeThread, чтобы получить код выхода (или просто использовать глобальную переменную), затем CloseHandle, чтобы освободить дескриптор.

LPDWORD - это просто адрес (указатель) переменной DWORD. Звоните как:

DWORD exit_code;
if (!GetExitCodeThread(hThread1, &exit_code)) // handle failure
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...