AfxMessageBox("阻塞");
DataTh=AfxBeginThread((AFX_THREADPROC)SendTh,&thInfo,0,CREATE_SUSPENDED,0);
AfxMessageBox("创建");//SendTh里面只有
AfxMessageBox("执行");return 1;结果是点完"阻塞","创建"和"执行"一起弹出来了.为什么?我不想线程创建后立即运行...
DataTh=AfxBeginThread((AFX_THREADPROC)SendTh,&thInfo,0,CREATE_SUSPENDED,0);
AfxMessageBox("创建");//SendTh里面只有
AfxMessageBox("执行");return 1;结果是点完"阻塞","创建"和"执行"一起弹出来了.为什么?我不想线程创建后立即运行...
这句代码是说你的线程函数SendTh会阻塞, 并不是说AfxBeginThread会阻塞, AfxBeginThread创建一个新的线程后, 接着执行下面的代码
而你创建的新的线程则会因为CREATE_SUSPENDED标志而阻塞
楼主没搞明白线程的基本含义。
AfxMessageBox("阻塞");
DataTh=AfxBeginThread((AFX_THREADPROC)SendTh,&thInfo,0,0,0);
DataTh->SuspendThread();
AfxMessageBox("创建");
//==SendTh线程函数里面
Sleep(1000);
AfxMessageBox("执行");return 1;这样,新线程就不会运行.但是这是我自己想的替代方法.难道是AfxBeginThread不支持CREATE_SUSPENDED ?
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了.