C++ C++;Windows线程赢得';t出口

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

在下面的代码中,启动了一个线程,该线程调用网络嗅探器,其输出显示在控制台上。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;
}

线程必须等待“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的帮助。你给我指出了正确的方向。