diff --git a/CVCncLib/testSam.dll b/CVCncLib/testSam.dll index 2255fe4a..bca37ee6 100644 Binary files a/CVCncLib/testSam.dll and b/CVCncLib/testSam.dll differ diff --git a/IOB-MAN/IOBManPanel.cs b/IOB-MAN/IOBManPanel.cs index e6b78a62..0ae8a3b7 100644 --- a/IOB-MAN/IOBManPanel.cs +++ b/IOB-MAN/IOBManPanel.cs @@ -72,6 +72,10 @@ namespace IOB_MAN /// semaforo check... /// protected bool checkRunning = false; + + protected bool doTaskRun = false; + protected bool doParallel = true; + public IOBManPanel() { InitializeComponent(); @@ -358,12 +362,16 @@ namespace IOB_MAN updateProgBar(); if (!checkRunning) { - chekProcessStatusAsync(); + if (doTaskRun) + { + checkProcessStatusAsync(); + } + else + { + checkProcessStatus(); + } checkWatchdog(); } - else - { - } } /// /// Controllo periodico dei processi DA RIATTIVARE @@ -424,14 +432,35 @@ namespace IOB_MAN /// /// Controllo periodico dei processi attivi /// - private async Task chekProcessStatusAsync() + private void checkProcessStatus() { chekMult--; if (chekMult < 0) { - checkRunning = true; + // reset variabili appoggio chekMult = utils.CRI("chekMult"); + checkRunning = true; + // eseguo task! + checkRunningchild(); + updateStatus(); + checkRunning = false; + } + } + + /// + /// Controllo periodico dei processi attivi + /// + private async Task checkProcessStatusAsync() + { + chekMult--; + if (chekMult < 0) + { + // reset variabili appoggio + chekMult = utils.CRI("chekMult"); + checkRunning = true; + // eseguo task! await Task.Run(() => checkRunningchild()); + updateStatus(); checkRunning = false; } } @@ -451,39 +480,69 @@ namespace IOB_MAN private void checkRunningchild() { List item2rem = new List(); + IList allItems = (IList)ElencoIOB.List; bool needRem = false; numProcRunning = numProcAvviati; // 2020.02.01 passato chiamata specifica x leggere in 1 sola volta TUTTO elenco processi (x nome)... Process[] processList = Process.GetProcessesByName(TargetName); - // ciclo - foreach (iobAdapt item in ElencoIOB.List) + if (doParallel) { - // verifico se esista il processo... - try + // ciclo + Parallel.ForEach(allItems, item => { - Process p = myGetProcByID(processList, item.pID); - needRem = p.HasExited; + // verifico se esista il processo... + try + { + Process p = myGetProcByID(processList, item.pID); + needRem = p.HasExited; + } + catch + { + needRem = true; + } + if (needRem) + { + item2rem.Add(item); + item.isRunning = false; + numProcRunning--; + } + else + { + item.isRunning = true; + } } - catch + ); + } + else + { + foreach (iobAdapt item in allItems) { - needRem = true; - } - if (needRem) - { - item2rem.Add(item); - item.isRunning = false; - numProcRunning--; - } - else - { - item.isRunning = true; + // verifico se esista il processo... + try + { + Process p = myGetProcByID(processList, item.pID); + needRem = p.HasExited; + } + catch + { + needRem = true; + } + if (needRem) + { + item2rem.Add(item); + item.isRunning = false; + numProcRunning--; + } + else + { + item.isRunning = true; + } } } // aggiorno datagrid! dgvManagedItems.Invalidate(); - updateStatus(); } private void IOBManPanel_FormClosing(object sender, FormClosingEventArgs e)