matlab gui 循环计算过程实现暂停和继续计算

 我来答
tianxiawulang
推荐于2018-04-12 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2650万
展开全部

前段时间的一个问题【matlab gui 循环计算过程实现暂停和继续计算】(编号426631696194936852)是题主问的吧?

 

由于度娘弱智又恶心的过滤机制,后续的交流一直不顺畅(我试图通过评论说明多次被删,也看到多次有评论提醒,但打开却看不到),现把代码上传到这里。

 

基本做法是,在进行循环之前,加上以下几句:

fig=gcf; figure(fig);
setappdata(fig,'Disu_Pause',0)
set(fig,'WindowButtonDownFcn','setappdata(gcbf,''Disu_Pause'',~getappdata(gcbf,''Disu_Pause''))');

然后,在每个循环体的最里层的最前面,加上

    % 通过获取自定义的数据Disu_Pause判断是否暂停;关闭窗口则退出
    try
        while true
            if ~getappdata(fig,'Disu_Pause')
                break
            else
                pause(0.01)
            end
        end
    catch me
        return
    end

基本思想:

1、通过自定义窗口的应用数据避免使用全局变量

2、设置窗口的WindowButtonDownFcn回调函数在点击鼠标时改变应用数据;

3、在每个循环中,如果状态为pause,则利用形式上的死循环进行等待(每次0.01秒,是系统时钟的精度),如果不是状态,则退出等待的循环体;

4、用try-catch结构,在关闭窗口时返回(即退出程序)。

8150205
2018-11-19 · TA获得超过116个赞
知道答主
回答量:42
采纳率:100%
帮助的人:4.6万
展开全部

用全局变量也行,但是循环体里面要加入drawnow()函数,让函数有机会读取你更改的全局变量以实现停止。

一个按钮开始循环,预留全局变量中断循环,另一个按钮改变全局变量。

点击一个按钮,不断的输出i自增的数值,然后一个if判别全局变量控制循环的中断,在循环体中,插入drawnow(),让函数有机会读取你更改的全局变量。这个按钮下的代码如下:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global h;
i=1;
while 1
    i=i+1
    if (h==0)
        break;
    end
    drawnow()
end

另一个按钮,改变全局变量

function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% handles.h=0;
global h;
h=0;

提示:需要已经在OpeningFcn声明过全局变量。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式