我做了一个多线程的程序,当程序开始执行是我并没有创建多线程,也就是说除了主线程外,其他的还有4个辅助线程,都是都过点击某一个按钮候后才创建的,
    现在我把程序执行起来,通过windows任务管理器看到只有一个线程,但是我按了“保存”按钮后,马上就显示了有6个线程了,这是怎么回事阿?我并没有开启那些辅助线程,为什么我一保存就就会显示6个线程在运行?
    另外一个问题就是开启辅助线程后,程序就有内存泄漏,我是通过AfxBeginThread创建的,望大家能够指点一二,谢谢!

解决方案 »

  1.   

    自己跟踪,看看那里调用afxbeginthread的。其实线程处理函数里也可以设断点的。
    内存泄漏的问题不好说,自己看看线程中那里分配内存了,有没有释放。
      

  2.   

    new之后要释放
    设一下断点,看看到底有没执行到AfxBeginThread就知道为什么了
      

  3.   

    当然没有执行到AfxBeginThread,我又没有开启其他线程,但是确实可以看到有5个线程,
    好像mfc生成的程序都是这样的
      

  4.   

    传给AFXBEGINTHREAD函数的是CWINTHREAD对象还是函数指针?
    如果是CWINTHREAD(或派生),有没有改变过他的M_BAUTODELETE变量(默认为TRUE),如果改变了,需要自己DELETE CWINTHREAD,否则不需要(也不应该).
    如果是函数指针,内存泄漏大多数是这个函数内部问题产生的确定有没有调用过TERMINATETHREAD函数,这个函数会产生内存泄漏
      

  5.   

    有没有用到SOCKET
    有时候杀毒程序会给你加多2个线程的
    还有就是可以用SPY++查看一下
      

  6.   

    大家说的都没有阿,你们不相信,可以试验一下的,你用mfc生成一个干净的
    sdi或者mdi程序,再保存一下,你就可以看到多出了很多线程,呵呵!