C++ C++;Windows线程赢得';t出口
在下面的代码中,启动了一个线程,该线程调用网络嗅探器,其输出显示在控制台上。1500毫秒后,我希望线程终止,但它没有。你能就我的错误提供见解吗?提前感谢你的帮助C++ C++;Windows线程赢得';t出口,c++,windows,multithreading,C++,Windows,Multithreading,在下面的代码中,启动了一个线程,该线程调用网络嗅探器,其输出显示在控制台上。1500毫秒后,我希望线程终止,但它没有。你能就我的错误提供见解吗?提前感谢你的帮助 unsigned int __stdcall mythreadB(void* data) { // declare char *Directory = "c:/Program Files/Wireshark"; int Ret = 0; string
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;
}
线程必须等待“other app.exe”完成,否则它无法通过
系统
。可能其他应用程序被卡住了
如果您将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的帮助。你给我指出了正确的方向。