我的程序启动后,会有4000多个句柄
我现在就知道CreateEvent的句柄要CloseHandle。
CWinThread->m_Thread要CloseHandle
可是还有两三千个句柄没关呀
还有什么东东是句柄,需要关的呀?不然占用很大系统资源啊

解决方案 »

  1.   

    下面这些都是句柄:
    Access token 
    Communications device 
    Console input 
    Console screen buffer 
    Event 
    File 
    File mapping 
    Job 
    Mailslot 
    Memory resource notification 
    Mutex 
    Named pipe 
    Pipe 
    Process 
    Semaphore 
    Socket 
    Thread 
    Waitable timer 
      

  2.   

    佩服。
    试过一次资源泄漏,GDI资源。涨到2000多的时候程序就OVER了。还试过4000多。
      

  3.   

    操作系统管理的所有资源都用句柄表示,但不是所有的句柄释放都用CloseHandle
      

  4.   

    释放GDI 资源用 BOOL DeleteObject( HGDIOBJ );
    释放内核资源用  BOOL CloseHandle( HANDLE );
      

  5.   

    世界上有那么多的书,只要知道ISBN号,就知道是哪本书。
    操作系统有那么多资源,知道了橘饼,就知道是哪个资源了。
      

  6.   

    好郁闷啊
    我的程序里主要就用了event和socket
    event我closehandle了
    socket我closesocket了
    可是句柄数还是不下去啊,该怎么办呢?
      

  7.   

    看看我的blog
    http://onegazhang.spaces.live.com/blog/cns!D5E642BC862BA286!577.entry
    Debugging handle leak on Windows XP
      

  8.   

    非常感谢,我有一个问题是:如果closehandle了CWinThread,好像就没法delete CWinThread了
    CWinThread需要delete吗?
    CWinThread* ptmp_thread_obj = AfxBeginThread(...);
    if (ptmp_thread_obj)
        CloseHandle(ptmp_thread_obj->m_hThread);
      

  9.   

    句柄的数量到底有没有限制呀?
    如果socket也是句柄的话,那句柄的数量岂不是没有上限了么?
      

  10.   


    一个程序Windows的GDI句柄是有限的。
      

  11.   

    根据在另一个帖子里得到的答案:
    1,系统/进程的句柄数量是没有上限的。(少数种类的句柄有自己的限制)
    2,SOCKET是句柄