C++ C++;WInApi线程

C++ C++;WInApi线程,c++,winapi,C++,Winapi,在“开始”按钮上,我正在执行线程 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 GetExi

在“开始”按钮上,我正在执行线程

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
 );
但是我不知道我必须在这里写些什么。
也许有人可以为我的示例编写代码

您应该使用一些机制(如事件)发出退出线程的信号。之后,主线程应该加入线程,然后获取退出代码(如果需要)。您永远不应该强制线程退出,因为资源可能不会被释放,互斥锁可能会死锁(如果由线程拥有)。

您应该使用一些机制(如事件)发出退出线程的信号。之后,主线程应该加入线程,然后获取退出代码(如果需要)。您不应该强制线程退出,因为资源可能不会被释放,互斥锁可能会死锁(如果由线程拥有)。

尝试
WaitForSingleObject
等待线程完成,然后
GetExitCodeThread
获取退出代码(或者只使用全局变量),然后
关闭手柄
以释放手柄

LPDWORD
只是
DWORD
变量的地址(指针)。比如:

DWORD exit_code;
if (!GetExitCodeThread(hThread1, &exit_code)) // handle failure

尝试
WaitForSingleObject
等待线程完成,
GetExitCodeThread
获取退出代码(或仅使用全局变量),然后
CloseHandle
释放句柄

LPDWORD
只是
DWORD
变量的地址(指针)。比如:

DWORD exit_code;
if (!GetExitCodeThread(hThread1, &exit_code)) // handle failure

\uu out LPDWORD lpExitCode
表示您提供了指向
DWORD
的指针,函数将在其中为您放置退出代码,如第二个返回值

DWORD ec;
GetExitCodeThread(hThread, &ec);

\uu out LPDWORD lpExitCode
表示您提供了指向
DWORD
的指针,函数将在其中为您放置退出代码,如第二个返回值

DWORD ec;
GetExitCodeThread(hThread, &ec);

ExitThread
必须由线程本身调用。您可以使用
TerminateThread
,它将线程id作为参数并终止另一个线程。

ExitThread
必须由线程本身调用。您可以使用
TerminateThread
,它将一个线程id作为参数并终止另一个线程。

使用TerminateThread不是一个好主意。拉斯穆斯:总的来说,我同意你的看法。但是考虑到几乎没有关于实际用例的信息,我认为最好提及所有选项。评估可用选项是第二步:-)使用TerminateThread不是一个好主意。拉斯穆斯:总的来说,我同意你的看法。但是考虑到几乎没有关于实际用例的信息,我认为最好提及所有选项。对可用选项的评估是第二步:-)@Pavel您不需要调用ExitThread。从thread函数返回就足够了。@Pavel:正如其他人所说,您应该首先调用WaitForSingleObject/WaitForMultipleObjects。然后可以调用GetExitCodeThread,如我在回答中所示。在“butStart”上我必须运行线程,在“butStop”上我必须停止线程。我搜索这个函数,然后SuspendThread@Pavel您不需要调用ExitThread。从thread函数返回就足够了。@Pavel:正如其他人所说,您应该首先调用WaitForSingleObject/WaitForMultipleObjects。然后可以调用GetExitCodeThread,如我在回答中所示。在“butStart”上我必须运行线程,在“butStop”上我必须停止线程。我搜索这个函数ResumeThread和SuspendThread我这样做是如何在“butStop”上释放线程,然后我可以按“butStart”并编写工作请编写代码,我的英语很差,我不完全理解这里写的是什么我这样做是如何在“butStop”上释放线程,然后我可以按“butStart”并编写工作请编写代码,我的英语很差,我不太懂这里写的东西