
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个子线程先完成。。。。太神奇了。。为什么啊 展开
{
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个子线程先完成。。。。太神奇了。。为什么啊 展开
1个回答
展开全部
估计是跟AfxBeginThread的实现有关系
如果你想达到你的目的,你可以用CreateThread代替。CreateThread不会出这种奇奇怪怪的问题。注意不要写在winmain里,要写在一个独立的函数里。
大概就像下面一样:
void CreateSomeThread ()
{
CreateThread(......);
CreateThread(......);
CreateThread(......);
}
int main()
{
CreateSomeThread();
}
追问
请问写在winmain里,和写在一个独立的函数里有什么区别呢对于子线程的执行来看?
追答
在编写DLL的时候,如果把CreateThread写在dllmain是会出错的,具体请自行百度
所以写在winmain或许也有可能报错(我不写win32程序,没太注意)
如果不报错的话,写在哪里都没区别
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询