您当前的位置: 百科371电脑/网络VC++ → 电脑/网络内容 退出登录 用户管理 用户注册
本类热门文章
相关文章
中原建材网
关于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个线程时)这个问题有好的意见或 建议,请留言
[] [返回上一页] [打 印]
电脑/网络评论 (评论内容只代表网友观点,与本站立场无关!)

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

中原建材网 简单版 站长QQ:382546553