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