如何控制线程的数量?
假设一共有100个线程需要执行,但是每次只允许同时打开10个线程,
当打开的线程执行完毕后自动执行下一个线程,直至所有线程都执行完毕。
注:打开的线程并不是同一时间执行完毕的。

解决方案 »

  1.   

    线程池模型,规定每次并发最大数为10,让线程池对象来控制并发数。
    有不少开源的线程池模型,可以去网上找找。boost也有引应的程序库,不过我没用过。
      

  2.   

    线程池思想。
    先CreateThread创建100个,线程函数里都用WaitForSingleObject阻塞在Event上
    100个线程的句柄都放在队列A里,10个线程以内的活动线程放在集合B里。
    外界每请求1个线程,就从队列A头部取1个,放入集合B,然后准备好线程数据,SetEvent解挂线程。
    当然,集合B里如果有10个线程了,满了,外界再请求的时候,就返回错误码,表示满了。
    线程完成工作之后,调用线程池的TaskComplete(HANDLE hThread)函数,由线程池把他从集合B里删除,放入队列A的队尾。
    线程函数是个类似这样的循环:
    while(ture)
    {
        WaitForSingleObject();
        // Do work here.
        
        pThreadPool->TaskComplete(hCurrentThread);
    }