如果设置5个参数,启动同一线程,每启动一次线程使用一个参数,线程开始后该参数为不可再用,当线程结束时再把参数设置为可用,一共需要启动20个线程,若当前启动的线程数是5个则把后面启动的线程挂起,等待参数可用再启动,请高手指教思路,或者给个例子,大体框架也行,先谢过各位了

解决方案 »

  1.   

    线程入口记数加一, 结束时减一.
    一.
    如果发现记数大于等于"5",则停止在原位. 进行循环等待.二.
    操作参数前后要用锁.  使用了某参数就标记一下.过程如下://开始时
    1锁
    2for循环检查5个参数对应的标志
    3找到一个可用的参数
    4标记
    5解锁//自己的代码//完成任务退出时
    1.锁
    2.恢复标示,恢复参数
    3.解锁
      

  2.   

    HANDLE hEvents[5];ThreadFunc()
    {
    int iWait=WaitForMultipleObjects(5,hEvents,INFINITE);
    if(iWait-WAIT_OBJECT_0>=0 && iWait-WAIT_OBJECT_0<5)
    {
    ResetEvent(hEvents[iWait-WAIT_OBJECT_0],false);//如果Event为自动设置则不要这句
    //do something
    SetEvent(hEvents[iWait-WAIT_OBJECT_0],false);
    }
    else
    {
    //error handle
    }
    }
      

  3.   

    int g_iNum = 0; // 计数正运行的线程数量
    HANDLE g_hEvent = CreateEvent (NULL, TURE, TRUE, "FIVE"); // 事件对象,标志线程是否可继续执行ThreadFunc()
    {
    iNum++;  if (iNUm >= 5)
    ResetEvent (g_hEvent);
    else
    SetEvent (g_hEvent); WaitForSingleObject (g_hEvent, INFINITE); // 如果对象没有授信则等待

    // do something

    iNum--;

    }初学。