Pause function in matlab for 1 millisecond
740 次查看(过去 30 天)
显示 更早的评论
Hi,
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.
Greetings.
2 个评论
chandan kumar
2017-1-17
编辑:Walter Roberson
2023-4-24
Hello there,
First use:
pause on % to enable pause function
Now you can use pause function:
pause(x); // delay in seconds (x is non-negative real number)
Walter Roberson
2017-1-17
Pause is on by default.
On MS Windows, the resolution is only 0.01 seconds and using "pause on" does not change that.
回答(9 个)
AndreasDerFuchs
2016-3-4
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);
end;
fprintf('3 sigma accuracy = %.6f ms\n', std(t-d)*3000);
2 个评论
akin hunerli
2016-5-14
hi Hamid Reza saadati, i have the problem with the pause command working on a guide interface then i realised that we have to add a pause command end of the code.
Daniel Shub
2012-5-8
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.
0 个评论
Andreas Goser
2012-5-8
编辑:John Kelly
2014-5-27
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.
0 个评论
Malcolm Lidierth
2016-5-19
编辑:Malcolm Lidierth
2016-5-19
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. undocumentedmatlab.com has several relevant posts (see drawnow/pause)
0 个评论
Jakob Sørensen
2012-5-8
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 个评论
Walter Roberson
2015-11-2
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)
Marcel Kraemer
2013-2-5
编辑:Marcel Kraemer
2013-2-5
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
tic;
while toc < seconds
end
end
Cheers, Marcel
Andreas Sprenger
2013-9-27
Hi,
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.
Cheers
Andreas
Here an example for 32bit Windows:
if ~libisloaded('QPerf')
% loads kernel functions for time measurement
loadlibrary ('kernel32.dll', @QueryPerformance, 'alias', 'QPerf')
end
% 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;
end
% -----
function [methodinfo,structs,enuminfo] = QueryPerformance
%This function was generated by the perl file prototypes.pl 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.
fcns=struct('name',ival,'calltype',ival,'LHS',ival,'RHS',ival,'alias',ival);
structs=[];enuminfo=[];fcnNum=1;
% BOOL _stdcall QueryPerformanceCounter(LARGE_INTEGER *);
fcns.name{fcnNum}='QueryPerformanceCounter';
fcns.calltype{fcnNum}='stdcall';
fcns.LHS{fcnNum}='int32';
fcns.RHS{fcnNum}={'s_ULARGE_INTEGERPtr'};
fcnNum = fcnNum+1;
% BOOL _stdcall QueryPerformanceFrequency(LARGE_INTEGER *);
fcns.name{fcnNum}='QueryPerformanceFrequency';
fcns.calltype{fcnNum}='stdcall';
fcns.LHS{fcnNum}='int32';
fcns.RHS{fcnNum}={'s_ULARGE_INTEGERPtr'};
fcnNum = fcnNum+1;
structs.s_ULARGE_INTEGER.packing=8;
structs.s_ULARGE_INTEGER.members=struct('LowPart', 'uint32', 'HighPart', 'uint32');
methodinfo = fcns;
2 个评论
Andreas Sprenger
2013-9-27
移动:DGM
2023-4-24
Hi,
searching for a solution on 64bit Matlab I came across a workaround. Edit the prototype and change fcns.calltype from 'stdcall' (most common on 32bit Windows systems) to 'cdecl' (C type declaration). It works both on 32bit and 64bit Matlab systems. On 2013a there is a warning that the loader file will not be supported in future.
Andreas
Walter Roberson
2023-4-24
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Environment and Settings 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!