暂停在matlab函数1毫秒

1453(30天)
胡安
胡安 2012年5月8日
回答: 沃尔特·罗伯森 2023年4月24日几点?
你好,
我需要暂停我的matlab GUI程序,因为我使用串行通信,但当我使用暂停命令它只允许我暂停了0.01秒。
暂停(0.01)%在几秒钟内
我所需要的东西,例如:
暂停(0.001)%在几秒钟内,但实际上并不有效
有人知道如何为1毫秒暂停matlab ?谢谢你的阅读和回答。
问候。
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2017年1月17日
暂停在默认情况下。
在MS Windows,分辨率只有0.01秒,使用“暂停”不会改变。

登录置评。

答案(9)

1月
1月 2015年10月24日
编辑:1月 2015年10月24日
在Java中,有一个精确的计时器,可以直接调用Matlab:
java.lang.Thread.sleep(持续时间* 1000)在mysec % !

AndreasDerFuchs
AndreasDerFuchs 2016年3月4日
附加的停顿()matlab函数结合了上述想法。
可以暂停,精度0.03女士在我的电脑,不使用太多的cpu带宽,而不是0.8的准确性与java.lang.Thread.sleep女士(ms),或更糟糕的是15 ms暂停()的准确性。
我测试的准确性:
暂停(0);2 =施用;d = 2 / 12345;
我= 2;
t0 =抽搐;暂停(d (i)、t0);t (i) = toc (t0);
结束;
流(“3σ精度= %。6 f \ n '女士性病(时距)* 3000);
2的评论
托比杜赫斯去接替
托比杜赫斯去接替 2016年6月10日
完美的工作。谢谢分享!

登录置评。


丹尼尔Shub
丹尼尔Shub 2012年5月8日
得到毫秒计时精度以来大多数编程语言是极其困难的潜在时钟不准确。这真的是一个你可以容忍多少抖动的问题。
说,“串口”标签让我认为你应该看回调函数。

安德烈亚斯•戈斯
安德烈亚斯•戈斯 2012年5月8日
编辑:约翰·凯利 2014年5月27日
而雅各布的回答是正确的回答特定的问题,您可能想要做些不同的事情,因为暂停命令真的阻止MATLAB做东西。

马尔科姆Lidierth
马尔科姆Lidierth 2016年5月19日
编辑:马尔科姆Lidierth 2016年5月19日
暂停不仅导致睡眠(参见文档)如它刷新AWT / Swing美国东部时间。因此最小延迟将反映在后台需要做什么。 undocumentedmatlab.com 有几个相关的文章(见drawnow /暂停)

Jakob Sørensen
Jakob Sørensen 2012年5月8日
不工作怎么了?你用的什么Matlab版本?在R2011b,运行Windows 7,我得到以下结果
> >抽搐,暂停(0.001);toc;
运行时间是0.009849秒。
这是相当接近1毫秒。
7评论
沃尔特·罗伯森
沃尔特·罗伯森 2015年11月2日
在os x R2015a:
g = @()暂停(0.001);
时间(g, 0)
显示输出在0.001255和0.001404之间。(一定要使用0作为第二个参数,否则你最终测量时间返回定时器的“状态”)。
结果是始终高于1 1/4毫秒和小于1 1/2毫秒在测试我这样做了。请注意,
抽搐();暂停(0.001);toc ()
在命令行上的差异并不完全代表什么是JIT(及时编制)

登录置评。


马塞尔Kraemer
马塞尔Kraemer 2013年2月5日
编辑:马塞尔Kraemer 2013年2月5日
嗨,伙计们,
我和你有同样的问题,我无法在网上找到答案。所以我试着percetly有效,以下解决方案。
函数延迟(秒)
%功能暂停程序
= %秒秒的延迟时间
抽搐;
toc <秒
结束
结束
欢呼,烫发

安德烈斯派格
安德烈斯派格 2013年9月27日
你好,
一个32位Windows系统上你可以使用一个内核函数。我测试它,它工作得非常准确,硬件定时器。不幸的是我还没有找到一个解决方案涉及64位。欢迎任何提示。
干杯
安德烈亚斯
这里为32位Windows的一个例子:
如果~ libisloaded (“QPerf”)
%加载内核函数时间测量
loadlibrary (“kernel32.dll”@QueryPerformance,“别名”,“QPerf”)
结束
%为QueryPerformance数据结构…
价值。LowPart = uint32 (0);
价值。HighPart = uint32 (0);
QStruct = libstruct (“s_ULARGE_INTEGER”、价值);
%得到电脑的性能
[xval, QFreq] = calllib (“QPerf”,“QueryPerformanceFrequency”,QStruct);
频率= QFreq。HighPart * 2 ^ 32 + QFreq.LowPart;
%得到t0
[~,QCounter] = calllib (“QPerf”,“QueryPerformanceCounter”,QStruct);
t0 = (QCounter。HighPart * 2 ^ 32 * 1000 + QCounter.LowPart) /频率;
t1 = t0;
%的例子:等一下
t1 - t0 < 1000
[~,QCounter] = calllib (“QPerf”,“QueryPerformanceCounter”,QStruct);
t1 = (QCounter。HighPart * 2 ^ 32 * 1000 + QCounter.LowPart) /频率;
结束
% - - - - - -
函数[methodinfo、结构、enuminfo] = QueryPerformance
%这个函数是perl文件生成的原型。pl从loadlibary调用。在2006年4月5日19:40:14结婚
% perl选项:“赢了。我输出文件= QueryPerformance
ival ={细胞(1,0)};0到函数的实际数量变化百分比preallocate数据。
fcns =结构(“名字”ival,“calltype”ival,“韩”ival,“皇家”ival,“别名”,ival);
结构= [];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 =结构(“LowPart”,“uint32”,“HighPart”,“uint32”);
methodinfo = fcns;
2的评论
1月
1月 2015年10月24日
移动:为副总经理 2023年4月24日22:31
请不要发布一个问题的部分答案。看我的新答案……

登录置评。


沃尔特·罗伯森
沃尔特·罗伯森 2023年4月24日几点?
每15 ms运行Windows任务调度器,所以你不能得到0.001决议不通过忙等待。
看到扩展的讨论,与特定的测试,

类别

找到更多的在循环和条件语句帮助中心文件交换

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!