C++ Windows 线程不会退出
Posted
技术标签:
【中文标题】C++ Windows 线程不会退出【英文标题】:C++ Windows Thread Won't Exit 【发布时间】:2015-06-11 05:43:59 【问题描述】:在下面的代码中,启动了一个调用网络嗅探器的线程,其输出显示在控制台上。 1500 毫秒后,我希望线程终止,但事实并非如此。你能提供关于我的错误的见解吗?提前感谢您的帮助。
unsigned int __stdcall mythreadB(void* data)
// declare
char *Directory = "c:/Program Files/Wireshark";
int Ret = 0;
string Tshark_Command = "";
Ret = _chdir(Directory);
Tshark_Command = "tshark\ -V -B 5";
system(Tshark_Command.c_str());
return 0;
int main(int argc, char* argv[])
HANDLE myhandleB;
myhandleB = (HANDLE)_beginthreadex(0, 0, &mythreadB, 0, 0, 0);
WaitForSingleObjectEx(myhandleB, 1500,false);
CloseHandle(myhandleB);
return 0;
【问题讨论】:
首先,您应该检查每个系统调用返回的内容。如果它返回错误,您应该check what that error is。 【参考方案1】:线程必须等待“other-app.exe”完成,否则它无法通过system
。可能是其他应用卡住了。
换成system("notepad.exe");
就可以看到问题了
一种解决方案是使用CreateProcess
unsigned int __stdcall mythreadB(void* data)
PROCESS_INFORMATION pi = 0 ;
STARTUPINFO si = 0 ;
si.cb = sizeof(STARTUPINFO);
CreateProcess(L"c:\\windows\\system32\\notepad.exe",
0, 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
while (WaitForSingleObject(pi.hProcess, 1000))
return 0;
现在线程应该在程序退出后终止。注意“notepad.exe”不会终止。您必须使用来自pi.hProcess
的句柄并从main
关闭它。
【讨论】:
@HarryJohnston 这只是一个测试代码,我改了。 感谢 Barmak 和 Joachim 的帮助。你让我指出了正确的方向。以上是关于C++ Windows 线程不会退出的主要内容,如果未能解决你的问题,请参考以下文章
在退出之前跟踪 - 并正确结束 - C# - C++/CLI - C++ Windows 窗体应用程序中的本机和托管线程
使用 IOCP - C++ - Windows 检测子进程的退出/失败