Process как сосчитать - C#
Формулировка задачи:
Есть 2 функции
Как сделать чтобы функция func, ждала пока не выполнится до конца хотя бы один из запущенных proc, если их уже запущено 5 штук и после того как до конца отработает хотя бы один из запущенных proc, снова совершала вызов cmd?
public void cmd(String command)
{
System.Diagnostics.ProcessStartInfo procStartInfo =
new System.Diagnostics.ProcessStartInfo("cmd", "/C " + command);
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
}
public void func(String command)
{
while(true)
{
cmd("какая то команда");
}
}Решение задачи: «Process как сосчитать»
textual
Листинг программы
using System.Diagnostics;
using Microsoft.Win32.SafeHandles;
const int MAX_COMMANDS = 5;
List<Process> _runningProcs = new List<Process>(MAX_COMMANDS);
public void cmd(String command)
{
WaitForFreeSlot();
Process proc = Process.Start("cmd", "/C " + command);
_runningProcs.Add(proc);
}
private void WaitForFreeSlot()
{
for (;;)
{
for (int i=_runningProcs.Count-1; i>=0; i--)
{
if (_runningProcs[i].HasExited)
{
_runningProcs[i].Dispose();
_runningProcs.RemoveAt(i);
}
}
if (_runningProcs.Count == MAX_COMMANDS)
{
var procEvents = _runningProcs.Select(p => new ManualResetEvent(true) { SafeWaitHandle = new SafeWaitHandle(p.Handle, false) }).ToArray();
WaitHandle.WaitAny(procEvents);
foreach (var procEvent in procEvents)
{
procEvent.Dispose();
}
continue;
}
break;
}
}