我在动态连接口中创建线程
TPARA para;para.OutTime = timeout;
para.s = m_sSocket;
para.bExit = FALSE;
para.IsExit = FALSE;
para.pbConnected = &m_bConnected;
hThread = CreateThread(NULL, NULL, TimeoutControl, (LPVOID)(&para), 0, &dwThreadId);
if (hThread == NULL) return -1;
创建成功,但是线程不能运行,为啥????
高手帮忙!难道动态来接口不能创建线程吗???
我自在咋样来做???

解决方案 »

  1.   

    是不是run-time没有设置成多线程DLL?
      

  2.   

    可以的阿,dll可以创建线程。可能是你代码有问题。
      

  3.   

    我的代码没有问题!我做成EXE运行正常!
    当做成动态连接库的时候,看线程已经启动,
    只是线程不能运行!
      

  4.   

    那么连这个DLL的exe有没有退出?
      

  5.   

    楼主可以对DLL进行调试一下,把断点设在线程处理过程中然后运行一下。看有没有运行到。
      

  6.   

    dll当然可以创建线程,你看一下hThread的值是多少
      

  7.   

    hThread是对的!线程启动成功!
    不为空!是0x00000ad0
      

  8.   

    不一定是CreateThread的关系,说不定是线程函数中阻塞了
      

  9.   

    我只运行了这一个线程!  回复人: ColderRain(一切尽在不言中) ( ) 
      
       是不是run-time没有设置成多线程DLL?
     
     说的有可能,但是我不知道咋设????
      

  10.   

    settings --> C/C++ --> Category: Code Generation --> User run-time library设置成
    "Debug Multithreaded DLL"
      

  11.   

    不是run-time没有设置成多线程DLL?
    也不是这个原因!
    这的不会,高手,我希望遇到高手!
    期待高手!
      

  12.   

    确定主线程没有退出?你的调用这个DLL的EXE的部分呢?
      

  13.   

    typedef UINT ( * LPDLLFUNC)(CRuntimeClass**);
    LPDLLFUNC lpfnDllFunc = NULL;
    HINSTANCE hDLL   = NULL;        
    hDLL = AfxLoadLibrary("FishDQGate.dll");
    if(hDLL)
    {
    lpfnDllFunc = (LPDLLFUNC)::GetProcAddress(hDLL,"Init");
    if (!lpfnDllFunc)
    {
    AfxMessageBox("Function not found in DLL");
    FreeLibrary(hDLL);
    }
    CRuntimeClass* pNewViewClass;
    lpfnDllFunc(&pNewViewClass);
    CWinThread * pthrea;
    pthrea = new  CWinThread;
    pthrea->CreateThread();
    }
    else
    {
    AfxMessageBox("Dll not found!");
    }
    我用这种发试调用!有问题吗?? if(hDLL)
    打着位置,程序进入线程,停止!线程没相应!
      

  14.   

    那代码改成如下再试试
    TPARA* para = new TPARA();para->OutTime = timeout;
    para->s = m_sSocket;
    para->bExit = FALSE;
    para->IsExit = FALSE;
    para->pbConnected = &m_bConnected;
    hThread = CreateThread(NULL, NULL, TimeoutControl, para, 0, &dwThreadId);
      

  15.   

    我也碰到了这个问题看看是不是这个原因:
    During process startup and DLL initialization routines, new threads can be created, but they do not begin execution until DLL initialization is done for the process. 
      

  16.   

    不能在DllMain( )函数里创建线程。
      

  17.   

    如果是MFC regular dll,则不能在InitInstance( )函数里创建线程。
      

  18.   

    to: footway(靠边行走) 当然可以在DllMain中创建线程了
      

  19.   

    把你在dllmain里创建线程后的代码发出来看看,,
    WINDOWS核心编程里提到了这个问题,。
      

  20.   

    我不知道你是不是真的理解了WINDOWS核心编中的内容WINDOWS核心编中说的是不能用WaitForSingleObject函数等待线程的句柄
      

  21.   

    我没说清楚,不是不能DllMain( )里创建线程。
    而是最好不要那样编程,那样可能会产生不可预知的后果。