Pause function in matlab for 1 millisecond

984 visualizaciones (últimos 30 días)
Juan el 8 de Mayo de 2012
Respondida: Walter Roberson el 24 de Abr. de 2023
I need to pause my matlab program at GUI, because I'm using serial communication, but when I use pause command it only allows me to pause it for 0.01 seconds.
pause(0.01) %in seconds
The thing I need, for example:
pause(0.001) %in seconds, but actually doesn't works
Anyone knows how to pause matlab for 1 millisecond? Thanks for read and answer.
  2 comentarios
Walter Roberson
Walter Roberson el 17 de En. de 2017
Pause is on by default.
On MS Windows, the resolution is only 0.01 seconds and using "pause on" does not change that.

Iniciar sesión para comentar.

Respuestas (9)

Jan el 24 de Oct. de 2015
Editada: Jan el 24 de Oct. de 2015
There is an accurate timer in Java, which can be called directly in Matlab:
java.lang.Thread.sleep(duration*1000) % in mysec!

AndreasDerFuchs el 4 de Mzo. de 2016
The attached pauses() matlab function combines the above ideas.
It can pause with an accuracy of 0.03 ms on my PC, without using too much CPU-bandwidth, as opposed to an accuracy of 0.8 ms with java.lang.Thread.sleep(ms), or the even worse accuracy of 15 ms with pause().
I've tested the accuracy with:
pauses(0); ii=1:300; d=ii/12345;
for i=ii;
t0=tic; pauses(d(i),t0); t(i)=toc(t0);
fprintf('3 sigma accuracy = %.6f ms\n', std(t-d)*3000);
  2 comentarios
Toby Dewhurst
Toby Dewhurst el 10 de Jun. de 2016
Works perfectly. Thanks for sharing!

Iniciar sesión para comentar.

Daniel Shub
Daniel Shub el 8 de Mayo de 2012
Getting millisecond timing accuracy is extremely difficult in most programming languages since the underlying clocks are just not that accurate. It really is a question of how much jitter you can tolerate.
That said, the "serial port" tag makes me think you should look at callback functions.

Andreas Goser
Andreas Goser el 8 de Mayo de 2012
Editada: John Kelly el 27 de Mayo de 2014
While Jakob's answer is a correct answer to your specific question, you might want to do something different, as the PAUSE command really stops MATLAB from doing stuff.

Malcolm Lidierth
Malcolm Lidierth el 19 de Mayo de 2016
Editada: Malcolm Lidierth el 19 de Mayo de 2016
Pause does more than cause a sleep (see the docs) e.g. it flushes the AWT/Swing EDT. The minimum delay will therefore reflect what needs to be done in the background. has several relevant posts (see drawnow/pause)

Jakob Sørensen
Jakob Sørensen el 8 de Mayo de 2012
Doesn't work how? And what Matlab version are you using? In R2011b, running Windows 7, I get the following results
>> tic;pause(0.001);toc;
Elapsed time is 0.009849 seconds.
Which is reasonably close to 1 ms.
  7 comentarios
Walter Roberson
Walter Roberson el 2 de Nov. de 2015
R2015a on OS-X:
g = @() pause(0.001);
timeit(g, 0)
shows outputs between 0.001255 and 0.001404. (Be sure to use 0 as the second argument or else you end up measuring the time to return the "state" of the timer.)
The result is consistently higher than 1 1/4 millisecond and less than 1 1/2 millisecond in the tests I have done this way. Note that
tic(); pause(0.001); toc()
at the command line is not completely representative due to differences in what is JIT (Just In Time compiled)

Iniciar sesión para comentar.

Marcel Kraemer
Marcel Kraemer el 5 de Feb. de 2013
Editada: Marcel Kraemer el 5 de Feb. de 2013
Hi Guys,
I had the same problem as you and I couldn't find an answer on the internet. So I tried following solution which works percetly well for me.
function delay(seconds)
% function pause the program
% seconds = delay time in seconds
while toc < seconds
Cheers, Marcel
  1 comentario
KnowledgeSeeker el 20 de Jun. de 2014
Thank you Marcel. Works for me too...

Iniciar sesión para comentar.

Andreas Sprenger
Andreas Sprenger el 27 de Sept. de 2013
on a 32bit Windows System you may use a kernel function. It works quite accurate, I've tested it against hardware timer. Unfortunately I haven't found a solution on 64bit Win7. Any hints are welcome.
Here an example for 32bit Windows:
if ~libisloaded('QPerf')
% loads kernel functions for time measurement
loadlibrary ('kernel32.dll', @QueryPerformance, 'alias', 'QPerf')
% data structure for QueryPerformance...
Value.LowPart = uint32(0);
Value.HighPart = uint32(0);
QStruct = libstruct('s_ULARGE_INTEGER', Value);
% Get performance of the computer
[xval, QFreq] = calllib('QPerf', 'QueryPerformanceFrequency', QStruct);
Frequency = QFreq.HighPart*2^32 + QFreq.LowPart;
% Get t0
[~, QCounter] = calllib('QPerf', 'QueryPerformanceCounter', QStruct);
t0 = (QCounter.HighPart*2^32 + QCounter.LowPart) / Frequency * 1000;
t1 = t0;
% example: wait a second
while t1 - t0 < 1000
[~, QCounter] = calllib('QPerf', 'QueryPerformanceCounter', QStruct);
t1 = (QCounter.HighPart*2^32 + QCounter.LowPart) / Frequency * 1000;
% -----
function [methodinfo,structs,enuminfo] = QueryPerformance
%This function was generated by the perl file called from loadlibary.m on Wed Apr 5 19:40:14 2006
%perl options:'win.i -outfile=QueryPerformance
ival={cell(1,0)}; % change 0 to the actual number of functions to preallocate the data.
% BOOL _stdcall QueryPerformanceCounter(LARGE_INTEGER *);{fcnNum}='QueryPerformanceCounter';
fcnNum = fcnNum+1;
% BOOL _stdcall QueryPerformanceFrequency(LARGE_INTEGER *);{fcnNum}='QueryPerformanceFrequency';
fcnNum = fcnNum+1;
structs.s_ULARGE_INTEGER.members=struct('LowPart', 'uint32', 'HighPart', 'uint32');
methodinfo = fcns;
  2 comentarios
Jan el 24 de Oct. de 2015
Movida: DGM el 24 de Abr. de 2023
Please do not post a question in the section for answers. See my new answer...

Iniciar sesión para comentar.

Walter Roberson
Walter Roberson el 24 de Abr. de 2023
The Windows task scheduler runs every 15 ms, so you cannot get 0.001 resolution without resorting to something like busy-wait.
See the extended discussion, with specific tests, at


Más información sobre Graphics Performance en Help Center y File Exchange.


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by