LoadLibrary有没有在使用完后FreeLibrary?

解决方案 »

  1.   

    有啊,我在执行dll程序后FreeLibrary和在主程序退出时FreeLibrary都试过,不灵啊。
      

  2.   

    CMonitorThread moniThread;
    这个变量是从CWinThread继承的吧?
    会在你StartRequest函数结束时被析构.
    CWinThread的实现没去研究过.你直接_beginthread试试.不要从CWinThread继承.
      

  3.   

    _beginthreadex不就行么? mfc用AfxBeginThread也行吧
      

  4.   

    不是说CWinThread的创建线程函数不行,我说的是不用包装了的CWinThread类,避免析构.
      

  5.   

    直接用work thread吧,如果DLL没有包含什么复杂的操作的话
      

  6.   

    {
        CMonitorThread moniThread; // 有个小错误:这是个局部变量,函数返回就析构了
        moniThread.CreateThread(); 
        return 0; 
    }对于你的要求,直接用::CreateThread API创建工作者线程更合适一些,不存在线程结束需要释放资源的问题。
      

  7.   

    另外,在FreeLibrary时,你必须确定动态库内创建的线程已经结束。否则,一旦DLL被卸载,线程的执行体将不再存在于该进程空间里,会引发内存访问错误的