idamnjanovic@1: function tid = timerinit(par1,par2) idamnjanovic@1: %TIMERINIT Initialize a new timer. idamnjanovic@1: % TID = TIMERINIT() initializes a new timer for counting elapsed time, idamnjanovic@1: % and returns its id. idamnjanovic@1: % idamnjanovic@1: % TID = TIMERINIT('TIMERNAME') sets the timer name to the specified idamnjanovic@1: % string for display purposes. idamnjanovic@1: % idamnjanovic@1: % TID = TIMERINIT(ITERNUM) initializes a new ETA timer for a process with idamnjanovic@1: % ITERNUM iterations. An ETA timer can be used for both counting elapsed idamnjanovic@1: % time and estimating remaining time. idamnjanovic@1: % idamnjanovic@1: % TID = TIMERINIT('TIMERNAME',ITERNUM) sets the ETA timer name to the idamnjanovic@1: % specified string for display purposes. idamnjanovic@1: % idamnjanovic@1: % Example: idamnjanovic@1: % idamnjanovic@1: % tid = timerinit(100); idamnjanovic@1: % for i = 1:100 idamnjanovic@1: % pause(0.07); idamnjanovic@1: % timereta(tid,i,1); idamnjanovic@1: % end idamnjanovic@1: % timereta(tid,i); idamnjanovic@1: % idamnjanovic@1: % See also TIMERETA, 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 % start times idamnjanovic@1: global utiltbx_time_lastdisp % last display times idamnjanovic@1: global utiltbx_timer_iternums % iteration numbers idamnjanovic@1: global utiltbx_timer_lastiter % last queried iteration numbers idamnjanovic@1: global utiltbx_timer_name % timer names idamnjanovic@1: global utiltbx_timer_callfun % timer calling functions idamnjanovic@1: idamnjanovic@1: idamnjanovic@1: % parse function arguments % idamnjanovic@1: idamnjanovic@1: if (nargin==0) idamnjanovic@1: idamnjanovic@1: iternum = -1; idamnjanovic@1: timername = ''; idamnjanovic@1: idamnjanovic@1: elseif (nargin==1) idamnjanovic@1: idamnjanovic@1: if (ischar(par1)) idamnjanovic@1: iternum = -1; idamnjanovic@1: timername = par1; idamnjanovic@1: idamnjanovic@1: elseif (isnumeric(par1) && numel(par1)==1 && par1>0) idamnjanovic@1: iternum = par1; idamnjanovic@1: timername = ''; idamnjanovic@1: idamnjanovic@1: else idamnjanovic@1: error('Invalid number of iterations'); idamnjanovic@1: end idamnjanovic@1: idamnjanovic@1: elseif (nargin==2) idamnjanovic@1: idamnjanovic@1: if (ischar(par1) && isnumeric(par2)) idamnjanovic@1: if (numel(par2)==1 && par2>0) idamnjanovic@1: timername = par1; idamnjanovic@1: iternum = par2; idamnjanovic@1: else idamnjanovic@1: error('Invalid number of iterations'); idamnjanovic@1: end idamnjanovic@1: else idamnjanovic@1: error('Invalid function syntax'); idamnjanovic@1: end idamnjanovic@1: idamnjanovic@1: else idamnjanovic@1: error('Too many function parameters'); idamnjanovic@1: end idamnjanovic@1: idamnjanovic@1: idamnjanovic@1: % register the timer % idamnjanovic@1: idamnjanovic@1: if (isempty(utiltbx_timer_start_times)) idamnjanovic@1: utiltbx_timer_start_times = clock; idamnjanovic@1: utiltbx_time_lastdisp = utiltbx_timer_start_times; idamnjanovic@1: utiltbx_timer_iternums = double(iternum); idamnjanovic@1: utiltbx_timer_lastiter = 0; idamnjanovic@1: utiltbx_timer_name = { timername }; idamnjanovic@1: utiltbx_timer_callfun = {}; idamnjanovic@1: tid = 1; idamnjanovic@1: else idamnjanovic@1: utiltbx_timer_start_times(end+1,:) = clock; idamnjanovic@1: utiltbx_time_lastdisp(end+1,:) = utiltbx_timer_start_times(end,:); idamnjanovic@1: utiltbx_timer_iternums(end+1) = double(iternum); idamnjanovic@1: utiltbx_timer_lastiter(end+1) = 0; idamnjanovic@1: utiltbx_timer_name{end+1} = timername; idamnjanovic@1: tid = size(utiltbx_timer_start_times,1); idamnjanovic@1: end idamnjanovic@1: idamnjanovic@1: idamnjanovic@1: % detect timer calling function % idamnjanovic@1: idamnjanovic@1: st = dbstack; idamnjanovic@1: if (length(dbstack) >= 2) idamnjanovic@1: utiltbx_timer_callfun{end+1} = st(2).name; idamnjanovic@1: else idamnjanovic@1: utiltbx_timer_callfun{end+1} = ''; idamnjanovic@1: end