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/App.config b/IOB-MAN/App.config
index 9790b837..a1a2ef03 100644
--- a/IOB-MAN/App.config
+++ b/IOB-MAN/App.config
@@ -9,6 +9,7 @@
+
diff --git a/IOB-MAN/IOBManPanel.cs b/IOB-MAN/IOBManPanel.cs
index e6b78a62..637b238e 100644
--- a/IOB-MAN/IOBManPanel.cs
+++ b/IOB-MAN/IOBManPanel.cs
@@ -28,6 +28,15 @@ namespace IOB_MAN
#endregion
+ ///
+ /// Token x cancellazione thread
+ ///
+ private CancellationTokenSource _cts;
+ ///
+ /// Context x sync thread
+ ///
+ private readonly SynchronizationContext synchronizationContext;
+
///
/// Totale processi avviati
///
@@ -41,6 +50,10 @@ namespace IOB_MAN
///
protected int watchDogMult = 75;
///
+ /// Counter x il force check status
+ ///
+ protected int forceCheckMult = 10;
+ ///
/// Counter per verifica processi (ogni volta che va a zero faccio vero check)
///
protected int chekMult = 4;
@@ -72,9 +85,14 @@ namespace IOB_MAN
/// semaforo check...
///
protected bool checkRunning = false;
+
+ protected bool doTaskRun = true;
+ protected bool doParallel = true;
+
public IOBManPanel()
{
InitializeComponent();
+ synchronizationContext = SynchronizationContext.Current;
myInit();
updateStatus();
}
@@ -86,7 +104,7 @@ namespace IOB_MAN
lblVers.Text = string.Format(" v.{0}", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version);
// init prog bar
tsProgBar.Maximum = 100;
- tsProgBar.Step = 1;
+ tsProgBar.Step = 2;
// gestione eventi binding source
ElencoIOB.AddingNew += ElencoIOB_AddingNew;
ElencoIOB.ListChanged += ElencoIOB_ListChanged;
@@ -180,45 +198,48 @@ namespace IOB_MAN
private void updateStatus()
{
- // aggiorno labels
- tsslNumProc.Text = $"Configurati {ArgsList.Count} processi | Avviati: {numProcAvviati} | Attivi: {numProcRunning}";
- bool hlRestart = false;
- // colore da num proc...
- if (numProcRunning == ArgsList.Count)
+ synchronizationContext.Post(new SendOrPostCallback(o =>
{
- tsslNumProc.ForeColor = Color.Green;
- }
- else if (numProcAvviati < ArgsList.Count)
- {
- tsslNumProc.ForeColor = Color.DarkRed;
- hlRestart = true;
- }
- else
- {
- tsslNumProc.ForeColor = Color.OrangeRed;
- hlRestart = true;
- }
- // fix autorestart...
- if (hlRestart)
- {
- chkAutoRestart.ForeColor = System.Drawing.Color.Red;
- chkAutoRestart.Text = "Auto Restart!!!";
- txtTOutAutoCheck.Visible = true;
- btnMoreTOut.Visible = true;
- // se NON checked aggiorno contatore...
- if (!chkAutoRestart.Checked)
+ // aggiorno labels
+ tsslNumProc.Text = $"Configurati {ArgsList.Count} processi | Avviati: {numProcAvviati} | Attivi: {numProcRunning}";
+ bool hlRestart = false;
+ // colore da num proc...
+ if (numProcRunning == ArgsList.Count)
{
- tOutAutocheck--;
- txtTOutAutoCheck.Text = (tOutAutocheck / (1000 / (utils.CRI("checkPeriod") * utils.CRI("chekMult")))).ToString();
+ tsslNumProc.ForeColor = Color.Green;
}
- }
- else
- {
- chkAutoRestart.ForeColor = DefaultForeColor;
- chkAutoRestart.Text = "Auto Restart";
- txtTOutAutoCheck.Visible = false;
- btnMoreTOut.Visible = false;
- }
+ else if (numProcAvviati < ArgsList.Count)
+ {
+ tsslNumProc.ForeColor = Color.DarkRed;
+ hlRestart = true;
+ }
+ else
+ {
+ tsslNumProc.ForeColor = Color.OrangeRed;
+ hlRestart = true;
+ }
+ // fix autorestart...
+ if (hlRestart)
+ {
+ chkAutoRestart.ForeColor = System.Drawing.Color.Red;
+ chkAutoRestart.Text = "Auto Restart!!!";
+ txtTOutAutoCheck.Visible = true;
+ btnMoreTOut.Visible = true;
+ // se NON checked aggiorno contatore...
+ if (!chkAutoRestart.Checked)
+ {
+ tOutAutocheck--;
+ txtTOutAutoCheck.Text = (tOutAutocheck / (1000 / (utils.CRI("checkPeriod") * utils.CRI("chekMult")))).ToString();
+ }
+ }
+ else
+ {
+ chkAutoRestart.ForeColor = DefaultForeColor;
+ chkAutoRestart.Text = "Auto Restart";
+ txtTOutAutoCheck.Visible = false;
+ btnMoreTOut.Visible = false;
+ }
+ }), "");
}
///
@@ -356,13 +377,22 @@ namespace IOB_MAN
private void MainTimer_Tick(object sender, EventArgs e)
{
updateProgBar();
- if (!checkRunning)
+ if (!checkRunning && forceCheckMult > 0)
{
- chekProcessStatusAsync();
+ forceCheckMult = utils.CRI("forceCheckMult");
+ if (doTaskRun)
+ {
+ checkProcessStatusAsync();
+ }
+ else
+ {
+ checkProcessStatus();
+ }
checkWatchdog();
}
else
- {
+ {
+ forceCheckMult--;
}
}
///
@@ -424,14 +454,39 @@ 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");
- await Task.Run(() => checkRunningchild());
+ 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!
+ //var taskRes = Task.Run(() => checkRunningchild());
+ //taskRes.Wait();
+
+ await Task.Run(() => checkRunningchild()).ConfigureAwait(false);
+
+ updateStatus();
checkRunning = false;
}
}
@@ -451,39 +506,76 @@ 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
+ {
+ if (processList.Length > 0)
+ {
+ Process p = myGetProcByID(processList, item.pID);
+ needRem = p.HasExited;
+ }
+ else
+ {
+ needRem = true;
+ }
+ }
+ 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)
diff --git a/Jenkinsfile b/Jenkinsfile
index 927926c0..d5b2d8ec 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -9,7 +9,7 @@ pipeline {
steps {
/* calcolo numero versione... diverso x branch MASTER/DEVELOP */
script {
- withEnv(['NEXT_BUILD_NUMBER=660']) {
+ withEnv(['NEXT_BUILD_NUMBER=661']) {
// env.versionNumber = VersionNumber(versionNumberString : '3.0.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true)
env.versionNumber = VersionNumber(versionNumberString : '3.0.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}')
env.APP_NAME = 'MAPO-IOB-WIN'