m_hThread = CreateThread(NULL, 0, RevThread, this, 0, &m_dwThreadID ); if( NULL == m_hThread )
{
iError = GetLastError();
return;
}
通过调试得到m_hTread的值是0xcccccccc,不为0,说明成功.
但RevThread这个函数却没有被执行.
怎么回事呢?
DWORD WINAPI RevThread(LPVOID lpParam)
{
MessageBox(NULL,"I Receive something!","hello",MB_OK);
.................
}
这个东西在另外一个项目中正常.
太怪了,其它有什么东西影响到呢?

解决方案 »

  1.   

    0xcccccccc ?看上去象是未赋值啊,一般还没赋值的变量都是这个值,呵呵
      

  2.   

    你在CreateThread的RecvThread前面加个(LPTHREAD_START_ROUTINE)试试
      

  3.   

    pthd->handle = CreateThread( NULL, NULL,ListenThread, (void*)pmdsock, NULL,&pthd->tid);
    ....
    unsigned long WINAPI  ListenThread(LPVOID lpParam)
    {
    ....
    }
      

  4.   

    我把完整的代码传上一个地方了,大家看看
    http://goboyy.51.net/FileSyncClient.rar
      

  5.   

    从第四个参数是this可以看出,这个thread是在类对象中被fork出来的,如果是类的成员函数做为线程函数,那个类成员函数必须是static的.没有去看你的原始代码,以上是猜的,猜不对不要见怪.
      

  6.   

    静态的,
    我已贴有完整的项目文件.
    http://goboyy.51.net/FileSyncClient.rar
      

  7.   

    ////////////////////////////////////////////////////////////
    //一个简单的例子:
    //如何创建线程
    #include <windows.h>
    #include <conio.h>DWORD WINAPI ThreadFunc( LPVOID lpParam ) 

        char szMsg[80];    wsprintf( szMsg, "Parameter = %d.", *(DWORD*)lpParam ); 
        MessageBox( NULL, szMsg, "ThreadFunc", MB_OK );    return 0; 

     
    VOID main( VOID ) 

        DWORD dwThreadId, dwThrdParam = 1; 
        HANDLE hThread; 
        char szMsg[80];    hThread = CreateThread( 
            NULL,                        // default security attributes 
            0,                           // use default stack size  
            ThreadFunc,                  // thread function 
            &dwThrdParam,                // argument to thread function 
            0,                           // use default creation flags 
            &dwThreadId);                // returns the thread identifier 
     
       // Check the return value for success. 
     
       if (hThread == NULL) 
       {
          wsprintf( szMsg, "CreateThread failed." ); 
          MessageBox( NULL, szMsg, "main", MB_OK );
       }
       else 
       {
          _getch();
          CloseHandle( hThread );
       }
    }
      

  8.   

    楼主,学习了一下你的代码,谢了你的创建线程根本没有执行,因为m_hThread 没有符值所以不一定为NULL.所以对话框的构造函数中
    加上m_hThread = NULL,就行了
    0xccccccc表示没有值的意思
    或者把if( NULL == m_hThread )去掉
    就可以了
      

  9.   

    没有初始化的时候都是0xccccccc那一句是画蛇添足
      

  10.   

    在Debug版本中,任何变量都会自动初始化成0xccccccc,所以实际上就是没有初始化。
    所以……你的代码根本没有执行
      

  11.   

    楼主不要自责,其实我们只是有时经验不足。
    要是在国内有一套全中文的MSDN,我觉得相当多人的水平都会很高的。
    可惜,这好象是不可能的。