AfxMessageBox("阻塞");
DataTh=AfxBeginThread((AFX_THREADPROC)SendTh,&thInfo,0,CREATE_SUSPENDED,0);
AfxMessageBox("创建");//SendTh里面只有
AfxMessageBox("执行");return 1;结果是点完"阻塞","创建"和"执行"一起弹出来了.为什么?我不想线程创建后立即运行...

解决方案 »

  1.   

    没用过MFC,查一下AfxBeginThread是否支持CREATE_SUSPENDED参数吧。
      

  2.   

    DataTh=AfxBeginThread((AFX_THREADPROC)SendTh,&thInfo,0,CREATE_SUSPENDED,0);
    这句代码是说你的线程函数SendTh会阻塞, 并不是说AfxBeginThread会阻塞, AfxBeginThread创建一个新的线程后, 接着执行下面的代码
    而你创建的新的线程则会因为CREATE_SUSPENDED标志而阻塞
      

  3.   

    你用Windows标准的api函数CreateThread吧, 这个肯定支持CREATE_SUSPENED参数
      

  4.   

    DataTh=AfxBeginThread((AFX_THREADPROC)SendTh,&thInfo,0,CREATE_SUSPENDED,0);在SendTh()这个线程函数体内::MessageBox()吧,
    楼主没搞明白线程的基本含义。
      

  5.   

    AfxMessageBox("执行");是新线程函数里面的. 创建线程的线程当然是不会阻塞.
    AfxMessageBox("阻塞");
    DataTh=AfxBeginThread((AFX_THREADPROC)SendTh,&thInfo,0,0,0);
    DataTh->SuspendThread();
    AfxMessageBox("创建");
    //==SendTh线程函数里面
    Sleep(1000);
    AfxMessageBox("执行");return 1;这样,新线程就不会运行.但是这是我自己想的替代方法.难道是AfxBeginThread不支持CREATE_SUSPENDED ?
      

  6.   

    CWinThread* AfxBeginThread(
       AFX_THREADPROC pfnThreadProc,
       LPVOID pParam,
       int nPriority = THREAD_PRIORITY_NORMAL,
       UINT nStackSize = 0,
       DWORD dwCreateFlags = 0,
       LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
    );
    CWinThread* AfxBeginThread(
       CRuntimeClass* pThreadClass,
       int nPriority = THREAD_PRIORITY_NORMAL,
       UINT nStackSize = 0,
       DWORD dwCreateFlags = 0,
       LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
    );典型的不看MSDN。
    你调用的是第一个版本。六参数的。把你的调用改为
    DataTh=AfxBeginThread((AFX_THREADPROC)SendTh,&thInfo,0,0,CREATE_SUSPENDED,0);
    就OK了.
      

  7.   

    虽然有点冤,我看了MFC类库详解.不过是我自己粗心造成的..