From 24d9fc6af3838c427cce2a75692f5cd6d1cc283f Mon Sep 17 00:00:00 2001 From: mtollari Date: Fri, 24 Mar 2017 09:53:52 +0000 Subject: [PATCH] Patch level : 12.0 372 Files correlati : sy Commento : Corretto causa crash programmi causato da xvaga.dll. Durante il calcolo del tempo rimanente con operazioni complesse nSpeed poteva risultare 0 facendo bloccare il programma sul conto nRemaining / nSpeed. Adesso sono tutti valori float git-svn-id: svn://10.65.10.50/branches/R_10_00@23701 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/xvaga/oswin32.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/xvaga/oswin32.cpp b/src/xvaga/oswin32.cpp index 06cec3dd0..fc762a856 100755 --- a/src/xvaga/oswin32.cpp +++ b/src/xvaga/oswin32.cpp @@ -1083,9 +1083,10 @@ bool Win32ProgressIndicator::SetProgress(long nCurrent, long nTotal) const long nSec = (clock() -_start) / CLOCKS_PER_SEC; if (nSec > 0) { - const int nSpeed = nCurrent / nSec; - const int nRemaining = nTotal - nCurrent; - const int remainingTime = nRemaining / nSpeed; + // Trasformati i valori in float per evitare problemi, capitava che durante operazioni complesse nSpeed risultasse 0 per poi far crashare il programma 2 istruzioni dopo + const float nSpeed = (float)nCurrent / (float)nSec; + const float nRemaining = (float)nTotal - nCurrent; + const float remainingTime = nRemaining / nSpeed; // <-- Qua int s = nSec; const int h = s / 3600; s %= 3600; const int m = s / 60; s %= 60; @@ -1093,14 +1094,14 @@ bool Win32ProgressIndicator::SetProgress(long nCurrent, long nTotal) str = str.Format("%d%% - Trascorsi %02d:%02d:%02d", _perc, h, m, s); if (nSpeed < 120) - str << str.Format(" - Velocità %d/sec - %d sec.alla fine", nSpeed, remainingTime); + str << str.Format(" - Velocità %.2f/sec - %.0f sec.alla fine", nSpeed, remainingTime); else { const int mins = remainingTime / 60; - str << str.Format(" - Velocità %d/min", nSpeed * 60); + str << str.Format(" - Velocità %.2f/min", nSpeed * 60); if (mins < 2) - str << str.Format(" - %d sec.alla fine", remainingTime); + str << str.Format(" - %.0f sec.alla fine", remainingTime); else str << str.Format(" - %d min.alla fine", mins); }