windows编程中 主线程AfxBeginThread很多个子线程后sleep了30秒 为什么主线程不挂起让子线程运行 5

for(inti=0;i<500;i++){AfxBeginThread(MyThread,&myparam,THREAD_PRIORITY_TIME_CRITICAL)... for(int i =0; i <500; i++)
{
AfxBeginThread(MyThread,&myparam,THREAD_PRIORITY_TIME_CRITICAL);
}
::Sleep(30000);

for(int i =0; i <200; i++)
{
AfxBeginThread(MyThread,&myparam,THREAD_PRIORITY_TIME_CRITICAL);
}

调试发现子线程在主线程sleep的30秒期间并没有开始执行而是等第二次又开了200个子线程后700个子线程才一起开始执行 我的子线程进行了访问网络一些操作
sleep不是让出cpu时间片吗 怎么第一个30秒子线程没执行?
有什么方法使30秒期间子线程会并行运行?
另外如果改为
HANDLE g_threadhandles[500] ; //全局变量

for(int i =0; i <500; i++)
{
CWinThread* cwndthreadptr=AfxBeginThread (MyThread,&myparam,THREAD_PRIORITY_TIME_CRITICAL);

g_threadhandles[i]=cwndthreadptr->m_hThread;
}

::WaitForMultipleObjects(500,g_threadhandles,TRUE,INFINITE);

for(int i =0; i <200; i++)
{
AfxBeginThread(MyThread,&myparam,THREAD_PRIORITY_TIME_CRITICAL);
}

::WaitForMultipleObjects竟然不阻塞等待前500个子线程先完成。。。。太神奇了。。为什么啊
展开
 我来答
飘菲的白色
2014-06-07 · TA获得超过617个赞
知道小有建树答主
回答量:338
采纳率:0%
帮助的人:348万
展开全部

估计是跟AfxBeginThread的实现有关系

 

如果你想达到你的目的,你可以用CreateThread代替。CreateThread不会出这种奇奇怪怪的问题。注意不要写在winmain里,要写在一个独立的函数里。

 

大概就像下面一样:

void CreateSomeThread ()
{
    CreateThread(......);
    CreateThread(......);
    CreateThread(......);
}
int main()
{
    CreateSomeThread();
}
追问
请问写在winmain里,和写在一个独立的函数里有什么区别呢对于子线程的执行来看?
追答
在编写DLL的时候,如果把CreateThread写在dllmain是会出错的,具体请自行百度

所以写在winmain或许也有可能报错(我不写win32程序,没太注意)

如果不报错的话,写在哪里都没区别
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式