gpt4 book ai didi

matlab - 一个定时器可以在另一个定时器的回调期间触发吗?

转载 作者:行者123 更新时间:2023-12-01 23:59:24 29 4
gpt4 key购买 nike

我有两个计时器同时运行。第一个计时器每 1 秒触发一次,运行时间为 0.2 秒。第二个计时器每 20 分钟触发一次,运行时间为 5 分钟。我想让第一个计时器在第二个计时器执行回调的 5 分钟内继续触发。实际上,在第二个定时器的回调期间,第一个定时器不会触发。是否可以配置计时器以我想要的方式执行?

最佳答案

有一个解决方法,具体取决于计时器回调的工作结构。如果长定时器回调正在运行长循环或对不同函数的调用序列,您可以插入 drawnow()pause(0.01) 调用以使其屈服于 Matlab 的事件调度队列,它将处理待处理的图形和计时器事件,包括其他计时器的触发器。

这有点像老式的协作多任务处理,其中每个线程必须显式地将控制权交给其他线程,而不是被系统调度程序抢占。 Matlab 在 M 代码执行方面是单线程的。当 Matlab 函数运行时,引发的事件将被放入事件队列中,并等待函数完成并返回到命令提示符,或 drawnow()pause()uiwait() 或类似函数被调用。这就是保持 Matlab GUI 响应能力的方法,并且记录在他们的 Handle Graphics 内容下。但 Matlab 计时器对象使用相同的事件队列进行回调。 (至少在几个版本之前;这只是半文档化的,可能会改变。)因此您可以使用相同的功能来管理它们的活跃度。您可能还需要调整计时器上的 BusyMode

这是一种黑客攻击,但只要您不需要精确的计时,并且不需要回调代码实际并行运行,它就应该为您提供基本功能。 (无论哪个计时器回调已产生,都将等待另一个计时器回调完成,然后再继续其自己的工作。)

如果长回调确实在一个长操作上被阻止,而您无法将 drawnow 调用插入其中,那么您对基本 Matlab 的运气不好,需要使用其中一种解决方法评论者建议。

关于matlab - 一个定时器可以在另一个定时器的回调期间触发吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22027994/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com