| 关于N个线程等待执行
|
减小字体
增大字体
|
问题:现在有20000个东西要处理这些处理当然要用纯程处理而一次执行创建几百万个线程是不实际的,所以要分开执行,先创建10个线程;;等执行完了再创建10 线程,又执行。。。。如此到最后执行完毕请高手指点吓,如何管理,实现这些线程之间的关系,我想始终有10个线程在执行,哪个线程结束后自动再创建一个线程,保存有10个线程在执行(当要处理的大于10个线程时)
#include "windows.h" #include "iostream.h" DWORD ThreadId[10]; HANDLE Thread[10]; int Operand=0; int suffix; int i=0; CRITICAL_SECTION g_cs; DWORD WINAPI ThreadProc( LPVOID lpParameter ); void CreateTh(DWORD suffix)
{ ::CloseHandle(Thread[suffix]); Thread[suffix]=CreateThread(NULL,0,ThreadProc,&suffix,0,&ThreadId[suffix]);
}
DWORD WINAPI ThreadProc( LPVOID lpParameter )
{ ::EnterCriticalSection(&g_cs);
if(Operand>=1000)
return 0;
suffix=*(int*)lpParameter;
i=0;
while(i<100)
{
Operand++;
i++;
cout<<Operand<<endl;
::Sleep(100);
}
::LeaveCriticalSection(&g_cs); CreateTh(suffix);
return 0; }
int main(int argc, char* argv[]) { InitializeCriticalSection(&g_cs); for(int i=0;i<10;i++) { Thread[i]=::CreateThread(NULL,0,ThreadProc,&i,0,&ThreadId[i]); } ::Sleep(1000); WaitForMultipleObjects(10,Thread,true,INFINITE); ::DeleteCriticalSection(&g_cs); for(i=0;i<10;i++) ::CloseHandle(Thread[i]); printf("Hello,Word\n"); return 0; }
我这里有一个10000线程来遍历计算机中所有的文件的例子.
我上面的思路是10个线程来处理同一件事,每当你个线程结束的
时候,以自己的线程编号和线程句柄来再创建一个线程,这样就保
证系统里面总有10个线程运行. 如果你对现在有20000个东西要处理这些处理当然要用纯程处理而一次执行创建几百万个线程是不实际的,所以要分开执行,先创建10个线程;;等执行完了再创建10 线程,又执行。。。。如此到最后执行完毕请高手指点吓,如何管理,实现这些线程之间的关系,我想始终有10个线程在执行,哪个线程结束后自动再创建一个线程,保存有10个线程在执行(当要处理的大于10个线程时)这个问题有好的意见或
建议,请留言
|
|
[]
[返回上一页]
[打 印]
|
|
|