Browse Source

- improved accuracy of the ProgressBar

Erik Rodner 13 years ago
parent
commit
3d02afd258
2 changed files with 19 additions and 23 deletions
  1. 17 21
      baselib/ProgressBarQt.cpp
  2. 2 2
      baselib/ProgressBarQt.h

+ 17 - 21
baselib/ProgressBarQt.cpp

@@ -54,36 +54,32 @@ ProgressBarQt::~ProgressBarQt()
 {
 }
 
-void ProgressBarQt::timediff2str(char *text, long time)
+void ProgressBarQt::timediff2str(char *text, double dtime)
 {
-	int seconds;
+  int time = int (dtime / 60);
+	double seconds = dtime - time*60;
 	int minutes;
 	int hours;
-	int milliseconds;
 
-	milliseconds = time % 100;
-	time /= 100;
-	seconds = time % 60;
-	time /= 60;
 	minutes = time % 60;
 	time /= 60;
 	hours = time;
 
 	if (hours != 0)
 	{
-		sprintf(text, "%dh %dm %d.%d s", hours, minutes, seconds, milliseconds);
+		sprintf(text, "%dh %dm %5.2fs", hours, minutes, seconds);
 	}
 	else if (minutes != 0)
 	{
-		sprintf(text, "%dm %d.%d s", minutes, seconds, milliseconds);
+		sprintf(text, "%dm %5.2fs", minutes, seconds);
 	}
 	else
 	{
-		sprintf(text, "%d.%d s", seconds, milliseconds);
+		sprintf(text, "%fs", seconds);
 	}
 }
 
-void ProgressBarQt::displayTimeStat(int posy, char *text, long time)
+void ProgressBarQt::displayTimeStat(int posy, char *text, double time)
 {
 	// Text (char *str,int x0,int y0,int val,int exp,Image img);
 	char disptext[200];
@@ -100,7 +96,8 @@ double ProgressBarQt::getCurrentTime()
 
 	gettimeofday(&curtime, NULL);
 
-	return curtime.tv_sec * 100.0 + curtime.tv_usec / 10000.0;
+	//return curtime.tv_sec * 100.0 + curtime.tv_usec / 10000.0;
+	return curtime.tv_sec + curtime.tv_usec * 1e-6;
 }
 
 void ProgressBarQt::show()
@@ -124,7 +121,6 @@ void ProgressBarQt::hide()
 
 	if (display_on)
 	{
-		//		Show ( OFF, display, name );
 		display_on = false;
 	}
 	if (graphicIsAvailable())
@@ -159,26 +155,26 @@ void ProgressBarQt::update(int count)
 	estimated_time = (count - step) * avg_time_step;
 
 	size_t mod;
-	if (avg_time_step > 50.0)
+	if (avg_time_step > 1.0)
 		mod = 1;
 	else
-		mod = (size_t) (50.0 / avg_time_step) + 1;
+		mod = (size_t) (1.0 / avg_time_step) + 1;
 
 	if ((mod <= 1) || (step % mod == 0))
 	{
 		char percent_text[10];
 		sprintf(percent_text, "%4.2f %%", step * 100.0 / count);
 
-		displayTimeStat(0, "Elapsed Time : ", (long int) elapsed_time);
-		displayTimeStat(1, "Estimated Time : ", (long int) estimated_time);
-		displayTimeStat(2, "Avg. Time per step : ", (long int) avg_time_step);
+		displayTimeStat(0, "Elapsed Time : ", elapsed_time);
+		displayTimeStat(1, "Estimated Time : ", estimated_time);
+		displayTimeStat(2, "Avg. Time per step : ", avg_time_step);
 
 		char eltime[200];
 		char estime[200];
 		char avgtime[200];
-		timediff2str(eltime, (long int) elapsed_time);
-		timediff2str(estime, (long int) estimated_time);
-		timediff2str(avgtime, (long int) avg_time_step);
+		timediff2str(eltime, elapsed_time);
+		timediff2str(estime, estimated_time);
+		timediff2str(avgtime, avg_time_step);
 		fprintf(
 				stderr,
 				"[PROGRESS] %s %s (elapsed time %s, estimated time %s, avg %s), \n",

+ 2 - 2
baselib/ProgressBarQt.h

@@ -49,8 +49,8 @@ protected:
 
 	bool useGraphics;
 
-	void timediff2str(char *text, long time);
-	void displayTimeStat(int posy, char *text, long time);
+	void timediff2str(char *text, double time);
+	void displayTimeStat(int posy, char *text, double time);
 	double getCurrentTime();
 	bool graphicIsAvailable();