[GRASS-dev] Re: G_percent() usage;

Glynn Clements glynn at gclements.plus.com
Wed Dec 10 03:03:47 EST 2008


Hamish wrote:

> > G_percent() is needed after the loop has finished, otherwise "100%\n" is
> > never printed, and the GUI progress bar* stalls at almost-complete.
> > 
> > consider the order of what happens here, and when will
> > row==nrows (ie 100%):
> >   for (row = 0; row < nrows; row++) { printf("row=%d\n", row); }
> >   G_percent(row, nrows, 2); 
> 
> 
> ok, I see what you did now with
>   G_percent(row+1, nrows, 2); 
> 
> in the loop. But I think that's wrong. For one thing it incorrectly skips
> 0% done. (typically harmlessly corrected in rounding, but still
> incorrect..)
> 
> maybe it's just me, but I prefer the historical way.

IMHO, we want 0% at the very beginning of the operation, and we need
100% at the end.

Ergo, if there are N iterations, G_percent() needs to be called N+1
times (0 to N inclusive), which means that there must be two calls:
one inside the loop, one outside.

For that, you can either call it with 0 before the loop and row+1 at
the end of each iteration, or with row at the start of each iteration
and rows after the loop. I suggest the latter.

-- 
Glynn Clements <glynn at gclements.plus.com>


More information about the grass-dev mailing list