我在DLL中使用了线程,线程中用while语句,在别的程序中调用此DLL接口函数来启动此线程没问题.但是如果不作成对外的函数,在DLL的构造函数中启动此线程,然后在别的程序中只加载DLL而不调用接口函数就出现问题了,程序好象很忙不响应鼠标.如何解决?谢谢

解决方案 »

  1.   

    你的程序在忙着处理WHILE循环,那顾得上你得鼠标呢!如果没错得话,你此时得CUP利用率应该是100%
      

  2.   

    我知道程序很忙,但是我是在一个线程中,而且线程在DLL里。即使在线程中不用while也一样
      

  3.   

    做个测试,在while(1)中加入小量延时试试
      

  4.   

    .. ThreadFunc(PVOID pParam)
    {
      ...
      while(1)
      {
         ...
         Sleep(20);
      }
      ...
    }
      

  5.   

    在DLL加了AfxMessageBox没有相应。我看《windows核心编程》中讲的DLL延时加载好像说得就是这个问题,但是具体我看不懂,那位朋友能帮帮我看看。
      

  6.   

    DLLMain中不要启动线程,这是微软的一个bug,启动线程和DLLMain防止重入使用了同一个内核信号,处理不好会造成死锁
    http://support.microsoft.com/?kbid=142243
      

  7.   

    afc(afc) 说得对,问题就在这。谁有办法100相送
      

  8.   

    没有办法,只能把创建线程部分挪出去,增加一个函数,就象winsock的WSAStartup一样
      

  9.   

    好像用DLL延时加载可以解决,但是我不会,谁会?各位大哥帮帮
      

  10.   

    应该可以的,使用CreateThread创建线程,而不是AfxBeginThread ,后者创建一个挂起的线程并等待,导致DllMain不可重入。另外在while循环中加入SwitchToThread()或Sleep(0)强迫线程调度。
      

  11.   

    sxmzmxh(哥舒帶菜刀) 说的也有问题,如果我调用LoadLibrary之后立即或者间隔很短调用FreeLibrary,此后线程开始执行,但是线程所在的地址空间被释放,会产生访问违规。