C ++ Windows线程不会退出

时间:2015-06-11 05:43:59

标签: c++ windows multithreading

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

1 个答案:

答案 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关闭它。