hSemaphore=CreateSemaphore(NULL,MaxThread,MaxThread,NULL);
for(int i=startHost;i<=endHost;i++){
WaitForSingleObject(hSemaphore,INFINITE);
hThread = CreateThread(NULL,0,threadPro,(LPVOID)i,0,NULL);
Sleep(SleepTime);
if(hThread!=NULL)
CloseHandle(hThread);
}
while(1)
{
WaitForSingleObject(hSemaphore,INFINITE);
if(!ReleaseSemaphore(hSemaphore,1,&PreviousCount))
{
Sleep(5000);
break;
}
if(PreviousCount==(MaxThread-1))
{
printf("\nAll done.");
break;
}
Sleep(500);
}CreateSemaphore创建的时候是信号量的计数器的个数为MaxThread,这里为200,每次WaitForSingleObject,信号量计数器减一,每次ReleaseSemaphore时候加一,上面这段代码怎么实现等待所有进程都结束了才输出"All done"呢,每个线程释放信号量代码在线程内部,如ReleaseSemaphore(hSemaphore,1,NULL)。PreviousCount是当前信号量计数器的前一个信号量,我的程序为什么到这老是为190几,到不了199,所以程序无法退出,为什么?
for(int i=startHost;i<=endHost;i++){
WaitForSingleObject(hSemaphore,INFINITE);
hThread = CreateThread(NULL,0,threadPro,(LPVOID)i,0,NULL);
Sleep(SleepTime);
if(hThread!=NULL)
CloseHandle(hThread);
}
while(1)
{
WaitForSingleObject(hSemaphore,INFINITE);
if(!ReleaseSemaphore(hSemaphore,1,&PreviousCount))
{
Sleep(5000);
break;
}
if(PreviousCount==(MaxThread-1))
{
printf("\nAll done.");
break;
}
Sleep(500);
}CreateSemaphore创建的时候是信号量的计数器的个数为MaxThread,这里为200,每次WaitForSingleObject,信号量计数器减一,每次ReleaseSemaphore时候加一,上面这段代码怎么实现等待所有进程都结束了才输出"All done"呢,每个线程释放信号量代码在线程内部,如ReleaseSemaphore(hSemaphore,1,NULL)。PreviousCount是当前信号量计数器的前一个信号量,我的程序为什么到这老是为190几,到不了199,所以程序无法退出,为什么?
解决方案 »
- 关于cmdshell管道的问题
- java 与vc++ 各自有何特点?
- 鼠标光标不能自动刷新?
- VC 新手问:有关数据转换
- 请问VC++和MFC有什么不同,如果做SOCKET开发用哪一个,如果是做图像图形用哪一个
- 线程到底拥有些什么资源?
- 请问ATL方式ActiveX控件上如何相应Edit控件上的回车
- 关于OnNotify的
- create table test(a char(12),b currency (10,3),c currency (12,3)) 是否有错?
- 如果把已有的LIB转成DLL,急!!
- 如何把多个对话框停靠在一个对话框上,而且这多个对话框还能任意切换显示?
- vc++ 关于编写类似QQ一样的聊天服务器
WaitForSingleObject(hSemaphore,INFINITE);
hThread = CreateThread(NULL,0,threadPro,(LPVOID)i,0,NULL);
Sleep(SleepTime);
if(hThread!=NULL)
CloseHandle(hThread);
}
------------------------------------------------------------------
把这个代码中的WaitForSingleObject(hSemaphore,INFINITE);去掉。
endHost-startHost>200,那不是开了N个线程??
还有就是可以把这个代码放到线程函数的开始处,意思就是能开线程,但是当前线程已经有200个时候,线程还能开,但是线程函数里面的代码执行不了,必须等WaitForSingleObject有信号才能继续执行线程函数里的代码。
不知道我的意思对了没?
你的release到底是对谁release的?
经过测试,是正确的,我就不知道为什么,我也不知道为什么要waitforsingleobject 2次