假设某时服务端程序中有一定数量线程在运行,但这时候服务端因某些原因希望停止服务,怎么样才能把这些线程终止才比较好呢?是通过ExitThread()吗?我觉得这样做没有清除线程中的内存等工作,有别的方法吗?(我的线程是工作者线程,没有消息循环)

解决方案 »

  1.   

    服务端程序中首先就有一个消息处理函数,用于处理你自定义的终止线程命令,至于终止线程,有两个函数ExitThread,TerminateThread.前者一般是线程正常结束时,系统自动调用的,本来它就会进行善后清理工作。而后者是强行终止,善后清理得自己来。
    如果是进程,也有ExitProcess(UINT fuExitCode) 和TerminateProcess(HANDLE hProcess,
    UINT fuExitCode)函数,
    可以从参数看出,只要有线程或进程的handle,我们就可以结束它,不推荐使用TerminateProcess和TerminateThread,因为如它不会通知已经开启的DLLs.你可以用CloseHandle来关闭线程:
    PROCESS_INFORMATION ProcInfo;
    BOOL fSuccess;
    fSuccess = CreateProcess(...,&ProcInfo);
    if (fSuccess){
        CloseHandle(ProcInfo.hThread);
        CloseHandle(ProcInfo.hProcess);//你要关闭的线程。
    }
      

  2.   

    设置一参数,在主线程中BOOL bMFlag = TURE;在终止辅线程的时候在主线程中让bMFlag = FLASE来终止辅线程,控制他们(参数)就可以了
      

  3.   

    也就是说当这参数为0的话return就好了
      

  4.   

    work线程的生命就是函数本身,函数结束了,现成就终止了。你的没法终止应该是线程中有什么循环语句吧?可以设全局变量,也可以设置event(个人觉得比全局变量安全),当外部线程触发条件时就改变全局变量/event,再在你的循环语句里加上判别语句,条件满足时就return.不放心就加个
    afxendthread()(mfc),实质还是内部调用_endthreadex.
    作为一个CWinThrea对象,最后应该释放对象(delete)