主线程结束时设置一个信号(全局变量就行),所有子线程检测到此信号就自行退出。主线程要做的只是等待(WaitForMultiObjects),等待的对象就是CreateThread时返回的句柄。
如果你的线程是随机创建和结束的,进程结束时无法确定那些线程仍在运行,可以用CreateToolhelp32Snapshot、Thread32First、Thread32Next枚举线程,得到句柄,然后等待。
不建议使用TerminateThread强行结束线程。如果非用这种“野蛮做法”,也大可不必对每个线程都调用TerminateThread,而只调用ExitProcess即可——ExitProcess自然会强行结束每一个子线程。

解决方案 »

  1.   

    请问exitprocess中的uExitCode是通过GetExitCodeProcess获得吧,但是process的句柄应该怎么获得呢?
      

  2.   

    1。CreateProcess时的PROCESS_INFORMATION中会返回句柄;
    2。OpenProcess可以通过ID得到句柄;
    3。Toolhelp的Process32First、Process32Next可以枚举进程并返回句柄;
    4。用过继承或DuplicateHandle得到句柄;
    5。GetCurrentProcess得到一个只能在本进程中代表当前进程的“伪”句柄。
      

  3.   

    另外,结束当前进程使用ExitProcess,此时的uExitCode是你自己指定的;GetExitCodeProcess是用来获得其他进程的uExitCode,即其他进程调用ExitProcess结束时指定的uExitCode。
      

  4.   

    "结束当前进程使用ExitProcess,此时的uExitCode是你自己指定的"
    这个uExitCode是不是可以任意指定啊?