- 积分
- 2445
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-9-19
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 dannyjoyride 于 2021-1-27 09:47 编辑
for循环中调用了一个函数myfunction,对于某次循环,该函数耗时很长,所以我想超过一定时间后跳出当前循环进入下一次循环。
- for i=1:n
- myfunction; %某次循环耗时超过一定时间则跳出该函数
- end
复制代码
因为程序在myfunction内部运行,所以没法在for循环中添加if 判断大于一定时间跳出来。另一个思路是用Timer,到指定时候后跳出来,但是我尝试了也不行。
目前我是用parfeval,即异步调用myfunction。该函数是开启并行计算,一个worker运行myfunction,另外一个worker监测myfunction是否运行完。这样虽然开了并行计算,但是只有一个worker在工作,其实并没有真正实现并行计算,所以效率比较低。
- fut=parfeval(@myfunction, 1, input); %异步调用函数
- didFinish=wait(fut, 'finished', 3600); %3600s之后是否结束
- if ~didFinish
- cancel(fut); %程序没有结束则退出该循环
- else
- output=fetchOutputs(fut); %结束则获得计算结果
- end
复制代码
哪位高手指点一下有没有其他好方法。非常感谢!
|
|