我CWinThread派生了一个类,然后用AfxBeginThread启动了新线程,但当主线程检测到特定标识时需强行终止已启动的子线程,该如何实现?直接pThread->ExitInstance()?会不会有危险造成内存泄漏?我发现如果主线程不等待子线程即退出,则有内存泄漏,但是我并没有在线程类中主动new任何空间。
如果是用AfxBeginThread(工作线程函数,...)的方式启动的线程呢?又该如何强行终止(MSDN说需在线程内部endthread或者return,但是我要从外部终止怎么办)?让线程循环检测某标识,若该标识被置位则退出?有没有更好的办法?

解决方案 »

  1.   

    内部强行中止,其实也算不上“强行”,完全可以使用正常退出,就是return或者EndThread之类。
    外部中止线程,可以使用事件来实现。调用WaitObject之类的函数。
    如果要外部“强行”中止,可能只有TerminateThread。在”强行“中止的情况下,好像没有办法
    防止内存泄漏。
    所以,最好不要强行中止线程。而是通知线程,使其自行结束。
      

  2.   

    在需要的时候,你return不就得了?
      

  3.   

    设一个全局的flag,用来表示何时结束线程。
      

  4.   

    不管你有没有new动态分配空间,只要创建了线程,就要占用资源(大概是进程的1/30左右)需要在线程执行中中止:
      void ExitThread(DWORD );
    如果在线程外面中止:
    BOOL TerminateThread(HANDLE ,DWORD );//不过该函数会引起系统不稳定,线程占用的资源不会释放(内存泄漏)。
      

  5.   

    就像上面几位说得一样,你既然知道要在什么地方结束Thread,就可以有方法正常结束它,而没有必要强行结束。   大家说的这些方法都可以,vc的程序员都对资源挺爱惜的(这点是其他人考虑的较少的)^_^