idamnjanovic@70: function varargout = timereta(tid,iter,delay) idamnjanovic@70: %TIMERETA Estimated remaining time. idamnjanovic@70: % S = TIMERETA(TID,ITER) returns the estimated remaining time (in idamnjanovic@70: % seconds) for the process associated with timer TID, assuming the idamnjanovic@70: % process has completed ITER iterations. Note: the function will exit idamnjanovic@70: % with an error if the timer TID does not have an associated number of idamnjanovic@70: % iterations (see function TIMERINIT). idamnjanovic@70: % idamnjanovic@70: % [H,M,S] = TIMERETA(TID,ITER) returns the estimated remaining time in idamnjanovic@70: % hours, minutes and seconds. idamnjanovic@70: % idamnjanovic@70: % TIMERETA(TID,ITER), with no output arguments, prints the estimated idamnjanovic@70: % remaining time to the screen. The time is displayed in the format idamnjanovic@70: % idamnjanovic@70: % TIMERNAME: iteration ITER / ITERNUM, estimated remaining time: HH:MM:SS.SS idamnjanovic@70: % idamnjanovic@70: % If the timer has no assigned name, the display format changes to idamnjanovic@70: % idamnjanovic@70: % Iteration ITER / ITERNUM, estimated remaining time: HH:MM:SS.SS idamnjanovic@70: % idamnjanovic@70: % TIMERETA(TID,ITER,DELAY) only displays the remaining time if the idamnjanovic@70: % time elapsed since the previous printout is at least DELAY seconds. idamnjanovic@70: % idamnjanovic@70: % See also TIMERINIT, TIMERCLEAR. idamnjanovic@70: idamnjanovic@70: idamnjanovic@70: % Ron Rubinstein idamnjanovic@70: % Computer Science Department idamnjanovic@70: % Technion, Haifa 32000 Israel idamnjanovic@70: % ronrubin@cs idamnjanovic@70: % idamnjanovic@70: % June 2008 idamnjanovic@70: idamnjanovic@70: idamnjanovic@70: global utiltbx_timer_start_times idamnjanovic@70: global utiltbx_timer_iternums idamnjanovic@70: global utiltbx_timer_lastiter idamnjanovic@70: global utiltbx_time_lastdisp idamnjanovic@70: global utiltbx_timer_name idamnjanovic@70: idamnjanovic@70: idamnjanovic@70: if (tid<1 || tid>length(utiltbx_timer_iternums)) idamnjanovic@70: error('Unknown timer id'); idamnjanovic@70: end idamnjanovic@70: idamnjanovic@70: if (utiltbx_timer_iternums(tid) < 0) idamnjanovic@70: error('Specified timer does not have an associated number of iterations'); idamnjanovic@70: end idamnjanovic@70: idamnjanovic@70: % update last reported iteration number idamnjanovic@70: utiltbx_timer_lastiter(tid) = iter; idamnjanovic@70: idamnjanovic@70: % compute elapsed time idamnjanovic@70: starttime = utiltbx_timer_start_times(tid,:); idamnjanovic@70: currtime = clock; idamnjanovic@70: timediff = etime(currtime, starttime); idamnjanovic@70: idamnjanovic@70: % total iteration number idamnjanovic@70: iternum = utiltbx_timer_iternums(tid); idamnjanovic@70: idamnjanovic@70: % compute eta idamnjanovic@70: timeremain = (iternum-iter)*timediff/iter; idamnjanovic@70: idamnjanovic@70: % return eta in seconds idamnjanovic@70: if (nargout==1) idamnjanovic@70: varargout{1} = timeremain; idamnjanovic@70: idamnjanovic@70: % return eta in hms idamnjanovic@70: elseif (nargout==3) idamnjanovic@70: [varargout{1}, varargout{2}, varargout{3}] = secs2hms(timeremain); idamnjanovic@70: idamnjanovic@70: idamnjanovic@70: % print eta idamnjanovic@70: elseif (nargout==0) idamnjanovic@70: idamnjanovic@70: % check last display time idamnjanovic@70: lastdisptime = utiltbx_time_lastdisp(tid,:); idamnjanovic@70: if (nargin>2 && etime(currtime,lastdisptime) < delay) idamnjanovic@70: return; idamnjanovic@70: end idamnjanovic@70: idamnjanovic@70: % update last display time idamnjanovic@70: utiltbx_time_lastdisp(tid,:) = currtime; idamnjanovic@70: idamnjanovic@70: % display timer idamnjanovic@70: [hrs,mins,secs] = secs2hms(timeremain); idamnjanovic@70: if (isempty(utiltbx_timer_name{tid})) idamnjanovic@70: printf('Iteration %d / %d, estimated remaining time: %02d:%02d:%05.2f', iter, iternum, hrs, mins, secs); idamnjanovic@70: else idamnjanovic@70: timername = utiltbx_timer_name{tid}; idamnjanovic@70: printf('%s: iteration %d / %d, estimated remaining time: %02d:%02d:%05.2f', timername, iter, iternum, hrs, mins, secs); idamnjanovic@70: end idamnjanovic@70: idamnjanovic@70: % invalid number of outputs idamnjanovic@70: else idamnjanovic@70: error('Invalid number of output arguments'); idamnjanovic@70: end idamnjanovic@70: