我在线程里搜索局域网里工作组和组内的主机,当对某个组没有权限或者组内没有主机时会花上很长的时间。在取局域网资源信息的api函数未退出时,我该怎样终止该线程并且不会引起内存泄漏。在网上查了一下用Terminate的方法不行,先Suspend再free程序会死掉,用TerminateThread好像会引起内存泄漏,
对多线程不了解,望大家指点一下??

解决方案 »

  1.   

    http://topic.csdn.net/t/20030312/21/1523636.html
    23楼 CONTEXT   Context;   
        
      DWORD   WINAPI   TestThread(LPVOID   param)   
      {   
      HANDLE   event=(HANDLE)param;   
      GetThreadContext(GetCurrentThread(),&Context);   
      DWORD   &ip=Context.Eip;   
      __asm   
      {   
      mov   eax,jmpexit;   
      mov   [ip],eax;   
      jmp   jmpcontinuedoing;   
      jmpexit:   
      jmp   ex;   
      jmpcontinuedoing:   
      }   
      SetEvent(event);   
      Sleep(10000);   
      __asm   
      {   
      ex:   
      nop;   
      }   
      return   0;   
      }   
        
      int   _tmain(int   argc,   _TCHAR*   argv[])   
      {   
      DWORD   threadid;   
      HANDLE   event=CreateEvent(NULL,FALSE,FALSE,NULL);   
      for(;;)   
      {   
      HANDLE   hand=CreateThread(NULL,0,TestThread,NULL,0,&threadid);   
      WaitForSingleObject(event,INFINITE);   //等线程初始化完成   
      SetThreadContext(hand,&Context);   
      WaitForSingleObject(hand,INFINITE);   //等线程结束   
        
      }   
      }
    在网上找到这么一段,好像是vc的吧,没怎么看懂
      WaitForSingleObject(event,INFINITE);   //等线程初始化完成   
      SetThreadContext(hand,&Context);   
      WaitForSingleObject(hand,INFINITE);   //等线程结束  这些具体是什么意思啊,不知道有人看过这段代码没有
    这样的线程,用TerminateThread会不会内存泄漏啊
    31楼的话没有看懂
      

  2.   

    TerminateThread多多少少会留下点儿问题的,msdn上列举了种种可能就是为了说明,没事儿的话千万别随便用它
    有异步版本的api就别怕麻烦用异步的吧,没有的话就尽量忍到api跑完吧,或者是由线程通知主线程已经搞定了
      

  3.   

      WaitForSingleObject(event,INFINITE);  //等线程初始化完成 
      SetThreadContext(hand,&Context); 
      WaitForSingleObject(hand,INFINITE);  //等线程结束 其实就是实现多线程的同步。。
    至于上面的汇编代码,俺就不懂了!呜呜
      

  4.   

    Terminate吧
    你这个服务应该有IP断的范围,设计一个线程池管理那么多的线程
    如果全部未结束,可能会出问题,比如线程等待的资源被你free了,访问操作了不合法的位置
      

  5.   

    结束每个工作中的线程Application.ProcessMessages方法不错
      

  6.   

    用的是具体那个API函数? 不支持异步方式吗,尝试WaitForSingleObject一个合适的时间退出!关于所谓的内存泄漏,主要还在于你要小心的控制那些需要多线程共享的数据资源。