在下面的代码中,启动一个线程,调用网络嗅探器,其输出显示在控制台上。在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;
}
答案 0 :(得分: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
关闭它。