diff --git a/CVCncLib/CVCncLib.dll b/CVCncLib/CVCncLib.dll
index c17d5ad9..5b7b3bca 100644
Binary files a/CVCncLib/CVCncLib.dll and b/CVCncLib/CVCncLib.dll differ
diff --git a/IOB-MAN/App.config b/IOB-MAN/App.config
index 1aca5e38..f0b075f6 100644
--- a/IOB-MAN/App.config
+++ b/IOB-MAN/App.config
@@ -8,7 +8,7 @@
-
+
diff --git a/IOB-MAN/IOBManPanel.cs b/IOB-MAN/IOBManPanel.cs
index 4f6d790f..fdeaf446 100644
--- a/IOB-MAN/IOBManPanel.cs
+++ b/IOB-MAN/IOBManPanel.cs
@@ -25,16 +25,16 @@ namespace IOB_MAN
private const int SW_SHOWMINIMIZED = 2;
private const int SW_SHOWNORMAL = 1;
- ///
- /// Oggetto locker x evitare problemi timer
- ///
- private static object _locker = new object();
-
///
/// Context x sync thread
///
private readonly SynchronizationContext synchronizationContext;
+ ///
+ /// Oggetto semaforico di lock
+ ///
+ private SemaphoreSlim _sync = new SemaphoreSlim(1);
+
///
/// Binding source degli elementi gestiti..
///
@@ -57,7 +57,7 @@ namespace IOB_MAN
///
/// Counter del timer di base
///
- protected int checkPeriod = 1000;
+ protected int checkPeriod = 2000;
///
/// semaforo check...
@@ -67,7 +67,7 @@ namespace IOB_MAN
///
/// Counter del timer di forceCheck (60 sec, era 5 sec)
///
- protected int forceCheckPeriod = 60000;
+ protected int forceCheckPeriodMult = 30;
///
/// Indica ultimo stato del check di restart...
@@ -84,6 +84,16 @@ namespace IOB_MAN
///
protected int lastNumProcRunning = 0;
+ ///
+ /// Numero di Lock effettuati con successo
+ ///
+ protected int numLockFail = 0;
+
+ ///
+ /// Numero di lock falliti
+ ///
+ protected int numLockSuccess = 0;
+
///
/// Totale processi avviati
///
@@ -105,9 +115,9 @@ namespace IOB_MAN
protected string TargetName = "";
///
- /// Contatore autockeck nativo
+ /// Dataora prossima scadenza riavvio automatico
///
- protected int tOutAutocheck = 100;
+ protected DateTime tOutAutocheck = DateTime.Now;
///
/// Counter del timer UI
@@ -314,7 +324,7 @@ namespace IOB_MAN
private void btnMoreTOut_Click(object sender, EventArgs e)
{
- tOutAutocheck += 60 * utils.CRI("autoRestartTimeoutMin") * (1000 / (utils.CRI("checkPeriod")));
+ tOutAutocheck = tOutAutocheck.AddMinutes(utils.CRI("autoRestartTimeoutMin"));
}
private void btnOpenAll_Click(object sender, EventArgs e)
@@ -410,32 +420,23 @@ namespace IOB_MAN
///
private async Task checkProcessStatusAsync()
{
- var hasLock = false;
- try
- {
- Monitor.TryEnter(_locker, ref hasLock);
- if (!hasLock)
- {
- return;
- }
- if (!checkRunning)
- {
- // reset variabili appoggio
- checkRunning = true;
- // eseguo task!
- await Task.Run(() => checkRunningchild()).ConfigureAwait(false);
- updateStatus();
- checkRunning = false;
- }
- }
- finally
+ await _sync.WaitAsync();
+
+ if (!checkRunning)
{
+ // reset variabili appoggio
+ checkRunning = true;
+ // eseguo task!
+ await Task.Run(() => checkRunningchild()).ConfigureAwait(false);
+ updateStatus();
checkRunning = false;
- if (hasLock)
- {
- Monitor.Exit(_locker);
- }
}
+ else
+ {
+ utils.lgInfo($"Error: checkRunning: {checkRunning}");
+ }
+
+ _sync.Release();
}
///
@@ -505,7 +506,7 @@ namespace IOB_MAN
private void chkAutoRestart_CheckedChanged(object sender, EventArgs e)
{
// se tolgo autorestart --> imposto NUOVA scadenza x forzare check
- tOutAutocheck = 60 * utils.CRI("autoRestartTimeoutMin") * (1000 / (utils.CRI("checkPeriod")));
+ tOutAutocheck = DateTime.Now.AddMinutes(utils.CRI("autoRestartTimeoutMin"));
txtTOutAutoCheck.Visible = !chkAutoRestart.Checked;
btnMoreTOut.Visible = !chkAutoRestart.Checked;
// fa subito controllo riavvio...
@@ -744,21 +745,6 @@ namespace IOB_MAN
private void forceCheckTimer_Tick(object sender, EventArgs e)
{
-#if false
- if (!checkRunning)
- {
- try
- {
- Task result = checkProcessStatusAsync();
- result.Wait();
- }
- catch (Exception exc)
- {
- Logging.Instance.Error($"forceCheckTimer_Tick {exc}");
- }
- }
-#endif
-
if (!checkRunning)
{
try
@@ -856,7 +842,7 @@ namespace IOB_MAN
MainTimer.Start();
UI_Timer.Interval = uiPeriod;
UI_Timer.Start();
- forceCheckTimer.Interval = forceCheckPeriod;
+ forceCheckTimer.Interval = checkPeriod * forceCheckPeriodMult;
forceCheckTimer.Start();
// avvio il task con apposita classe Steamware... da 00:30
int fullRestartHour = memLayer.ML.CRI("fullRestartHour");
@@ -934,7 +920,7 @@ namespace IOB_MAN
waitForExitMsec = utils.CRI("waitForExitMsec");
checkPeriod = utils.CRI("checkPeriod");
uiPeriod = utils.CRI("uiPeriod");
- forceCheckPeriod = utils.CRI("forceCheckPeriod");
+ forceCheckPeriodMult = utils.CRI("forceCheckPeriodMult");
TargetExe = utils.CRS("targetExe");
TargetName = utils.CRS("appNameExt");
if (string.IsNullOrEmpty(TargetExe))
@@ -1075,7 +1061,7 @@ namespace IOB_MAN
else
{
// se autorestart scaduto e NON checked --> lo imposto
- if (tOutAutocheck < 0)
+ if (tOutAutocheck < DateTime.Now)
{
// lo riattivo
chkAutoRestart.Checked = true;
@@ -1239,13 +1225,12 @@ namespace IOB_MAN
// se NON checked aggiorno contatore...
if (!chkAutoRestart.Checked)
{
- tOutAutocheck--;
- txtTOutAutoCheck.Text = $"{(tOutAutocheck / (1000 / (utils.CRI("checkPeriod"))))}";
+ txtTOutAutoCheck.Text = $"{tOutAutocheck.Subtract(DateTime.Now).TotalSeconds:N0}";
}
// se รจ variato...
if (hlRestart != lastHlRestart)
{
- tOutAutocheck = 60 * utils.CRI("autoRestartTimeoutMin") * (1000 / (utils.CRI("checkPeriod")));
+ tOutAutocheck = DateTime.Now.AddMinutes(utils.CRI("autoRestartTimeoutMin"));
lastHlRestart = hlRestart;
// fix autorestart...
if (hlRestart)
diff --git a/IOB-MAN/NLog.config b/IOB-MAN/NLog.config
index ff4a5d80..ed129685 100644
--- a/IOB-MAN/NLog.config
+++ b/IOB-MAN/NLog.config
@@ -23,9 +23,9 @@
-->