一段很简短的代码:
listen(ListenSock,5);
for(int i=0;i<MAX;i++)
{
if(ClientSocks[i]!=INVALID_SOCKET)
{
continue;
}
else
{
ClientSocks[i]=accept(ListenSock,NULL,NULL);
if(ClientSocks[i]!=INVALID_SOCKET)
{
         HANDLE handle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ClientRoutine,(LPVOID)ClientSocks[i],0,NULL);
            
//AfxMessageBox("");
//Sleep(1000);

}

}
}我自己建立的线程为什么不执行呢????
我把子线程的优先级该到了TIME_CRITICAL了,也不行。用Sleep(1000)也不行,但是加了AfxMessageBox("");就行了。请高手指点呀!!!

解决方案 »

  1.   

    你线程函数呢?
    看下CreateThread的返回值是什么?
      

  2.   

    哈哈
    MFC 的CSocket 不能用多线程
    我刚刚吃亏了
    如果一定要用多线程的话
    只有自己用API来写
    因为CSocket自己就是多线程和消息循环来实现非阻塞的~~~大概是这样吧
    具体我不是很清楚~~
      

  3.   

    void ClientRoutine(LPVOID x)
    {

        AfxMessageBox("x");}为了简化问题,我把子线程的核心代码删了,留下一个对话框语句来测试子线程的运行。结果就如我前面的问题中的情况一样。
      

  4.   

    DWORD dwThreadID = 0;
    HANDLE handle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ClientRoutine,(LPVOID)ClientSocks[i],0, &dwThreadID); if (handle)
    {
        // successed
    }
      

  5.   

    应该成功了,不然为什么在createthread后加了对话框就可以运行呢。
      

  6.   

    你误会我的意思了
    我是说在createthread后面加了对话框语句后我创建的子线程就可以运行了
    不加对话框语句子线程就不运行了。如源代码所示而且经过测试我的线程创建成功了,我可以保证
      

  7.   

    没道理:你在线程函数里不要使用AfxMessageBox,
    直接设置个断点调试下可不可以进入。
      

  8.   

    DWORD WINAPI ThreadProc(
      LPVOID lpParameter   // thread data
    );
    线程函数是这样的吧
      

  9.   

    CSocket绝对不要在多线程中,往往会出现问题。
    用了MessageBox让程序阻塞掉,使得Accept结束,有充分的时间去产生线程
      

  10.   

    楼主ClientSocks[i]用的是什么类型,是CSocket还是SOCKET?如果是CSocket,问题应该就是这位兄弟说的了。如果是SOCKET,是不是你的线程函数写错了,函数原型应该是这样的啊
    DWORD WINAPI ThreadProc( 
      LPVOID lpParameter  // thread data 
    ); 
    不知道是不是这个问题
     
      

  11.   

    Sleep时间是不是太短了?呵呵,不懂!期待高手
      

  12.   

    我先后试了试sleep,suspend,还试着建立了一个事件用resetevent设为非信状态,
    然后wsawaitformultipleevents,在子线程中用setevent的方法进行了同步,可是都不行呀。
    是不是最好不要在主线程中阻塞呢
    急死我了!!大侠救命!!!
      

  13.   

    sleep当然不行,都睡了你还能指望他干嘛呢