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