爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 15550|回复: 5

[程序设计] 一定时间后跳出当前for循环

[复制链接]
回帖奖励 29 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次(中奖概率 50%)

新浪微博达人勋

发表于 2021-1-27 09:41:23 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 dannyjoyride 于 2021-1-27 09:47 编辑

for循环中调用了一个函数myfunction,对于某次循环,该函数耗时很长,所以我想超过一定时间后跳出当前循环进入下一次循环。
  1. for i=1:n
  2.      myfunction; %某次循环耗时超过一定时间则跳出该函数
  3. end
复制代码

因为程序在myfunction内部运行,所以没法在for循环中添加if 判断大于一定时间跳出来。另一个思路是用Timer,到指定时候后跳出来,但是我尝试了也不行。

目前我是用parfeval,即异步调用myfunction。该函数是开启并行计算,一个worker运行myfunction,另外一个worker监测myfunction是否运行完。这样虽然开了并行计算,但是只有一个worker在工作,其实并没有真正实现并行计算,所以效率比较低。
  1. fut=parfeval(@myfunction, 1, input); %异步调用函数
  2. didFinish=wait(fut, 'finished', 3600); %3600s之后是否结束
  3. if ~didFinish
  4. cancel(fut); %程序没有结束则退出该循环
  5. else
  6. output=fetchOutputs(fut); %结束则获得计算结果
  7. end
复制代码

哪位高手指点一下有没有其他好方法。非常感谢!

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-1-27 16:16:03 | 显示全部楼层
try....catch试试?我感觉这个可以
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-1-28 00:10:15 | 显示全部楼层
本帖最后由 dannyjoyride 于 2021-1-28 00:13 编辑
伽蓝鸟 发表于 2021-1-27 16:16
try....catch试试?我感觉这个可以

我曾尝试利用try catch结合一个Timer实现跳出for循环。思路是一定时间后Timer触发一个错误,try catch捕捉到,然后跳出for循环。但是没成功。
你还有其他思路么?请指点!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-1-28 10:00:40 | 显示全部楼层

回帖奖励 +1 金钱

dannyjoyride 发表于 2021-1-28 00:10
我曾尝试利用try catch结合一个Timer实现跳出for循环。思路是一定时间后Timer触发一个错误,try catch捕 ...

不需要跳出for循环吧,如果错误了,直接ii=ii+1就行了?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-1-29 16:28:01 | 显示全部楼层
本帖最后由 dannyjoyride 于 2021-1-29 16:29 编辑
伽蓝鸟 发表于 2021-1-28 10:00
不需要跳出for循环吧,如果错误了,直接ii=ii+1就行了?

程序一直卡在myfunction内部不出来。怎么i=i+1?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-2-1 10:18:05 | 显示全部楼层
哪位高手有经验请指点!非常感谢!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表