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