例如在一个独立的线程中使用CInternetSession打开一个FTP连接 CFtpConnection* pFtp,设置TIMEOUT时间为5秒(不定,程序中设定)。
如果正在等待搜索中,这个时候主程序退出,就会产生内存泄漏,报告泄漏产生于pFtp,因为程序没来得及调用pFtp.Close()和delete pFtp;如果所搜索已经返回,线程自动退出就不会有什么问题。我的问题就是,有没有什么办法安全而且快速的中止搜索
大家不要吝啬自己的经验和创意啊!

解决方案 »

  1.   

    实在不行,就让主程序在接受到WM_DESTROY后等上5秒钟再退出。
      

  2.   

    我就是要越快越好啊!
    而且那个5秒是由用户设定的,总不能他设100秒我就傻等100秒再结束程序吧!
    最关键的是,一旦CInternetSession开始搜索了,就无法再设置它的TIME_OUT的值了,我的线程就一直要等着它返回,再关掉返回的Connection,以便安全的回收资源。那么怎么办好呢,我继续关注!
      

  3.   

    http://www.codeproject.com/internet/asyncwininet.asp
    Using WinInet HTTP functions in Full Asynchronous Mode
      

  4.   

    看了楼上给的地址,确实很有启发。不过经过仔细实验发现,似乎这个异步传输模式和我所要实现的功能还是有一定的差距。文章中所解决的是在文件传输过程中的异步传输的问题,似乎还是没有办法解决在连接时需要等待的问题。我程序中的问题是在连接IP时需要等待一段时间,只要Connection函数不返回,我就无法对该进程进行有效的操作,不能中止线程。
      

  5.   

    IE本身都有这个问题,看来没办法的。
    我用CInternetSession写过多线程程序,如果强制中止线程就会有内存泄漏。
      

  6.   

    不会吧,如果Wininet有这个无法解决的问题的话,那这个函数库还有什么用?连正常的退出都做不到!
    应该用什么方法改进的吧……
      

  7.   

    嗯,终于这个问题有一个解法了……需要为所有的线程维护一个Map,把每个线程的句柄,CInternetSession对应的HINTERNET(),各种Connection,甚至还有捕捉异常时候得到的CInternetException*都放进去,然后强制中止线程,在主线程中释放所有不为NULL的资源。此外,还有解决Map读写的互斥问题,防止重复删除资源……非常复杂,各种情况做了无数次试验,发现似乎没有再出现什么资源泄漏。不过这样做也太不爽了!净是一些危险的指针操作!
    所以继续在这里求一种更好的方法!