有一个程序,class A中含有线程句柄m_hThread.class A{
HANDLE m_hThread;
};.......程序不断调用CreateThread来产生线程,但返回的句柄都是m_hThread.
m_hThread = CreateThread(...)当程序退出时,调用CloseHandle(m_hThread);释放句柄.我的问题是---"不断调用CreateThread来产生线程",是否会产生内存泄漏(虽然在程序最后退出是调用了CloseHandle)???

解决方案 »

  1.   

    有一个程序,class A中含有线程句柄m_hThread.class A{
    HANDLE m_hThread;
    };.......程序不断调用CreateThread来产生线程,但返回的句柄都是m_hThread.
    m_hThread = CreateThread(...)
    但都没有及时释放句柄.只是在当程序退出时,调用CloseHandle(m_hThread);释放句柄.我的问题是---"不断调用CreateThread来产生线程"(没有及时释放句柄),是否会产生内存泄漏(虽然在程序最后退出是调用了CloseHandle)???
      

  2.   

    不断调用CreateThread来产生线程",随着线程的增多CPU的利用率就会越来越高,内存占用率也会越来越大,直至你的电脑死机
    而你只有一个句柄,那么释放的是最后一个被创建的线程,你前面创建的线程因为不能被释放(如果没有运行完)就会占用你的资源,而且你的最后一个线程如果还在存活的话,因为没有TerminateThread,即使CloseHandle,也不不会释放线程占用的资源.
    可是你为什么要那样呢?那不就等于在伤害你的电脑吗?
      

  3.   

    >>可是你为什么要那样呢?那不就等于在伤害你的电脑吗?应为要不断调用线程处理数据.  那如何处理好呢?
      

  4.   

    你的线程要能正常退出,CloseHandle只是关掉的该进程中的  该线程的 handle object描述符
      

  5.   

    CloseHandle只是关闭一个句柄,和线程是否退出没有关系.
      

  6.   

    一般地,线程没有退出的话,CloseHandle程序也会挂的。
    如果你不断地开线程,而那些线程都在工作的话,可以把这些句柄塞入一个队列,等到他们工作完的时候再CloseHandle,线程结束后及时CloseHandle是个好习惯。
    如果开了一个线程后先前的线程已经停止工作了,就及时CloseHandle,免得先前句柄逃脱你的管理,成为野指针,造成一些隐患。
    伤害电脑倒也谈不上,程序退出后什么都释放了。
      

  7.   

    呵呵,楼上不要误导人呀,句柄管理和和线程管理一点关系,没有,肯定closehandle不会引起线程挂起的!哎!
      

  8.   

    你可以去看一下《win32多线程编程》一书。
      

  9.   

    >>如果开了一个线程后先前的线程已经停止工作了,就及时CloseHandle,问题是:如何知道哪个线程"已经停止工作了"?
      

  10.   

    线程的结束最好用线程函数返回的方式,用terminatethread和exitthread都有可能导致内存泄漏。而closehandle只是关闭句柄,即放弃对该线程的访问接口