1

这是我的问题,我有 GUI 和一个写在我图的 .m 文件之外的函数(func1)。我的 GUI 上还有一个按钮,当按下启动 func1 时,现在这个功能非常占用 CPU 资源,可能需要很长时间才能完成,这就是为什么我希望该功能能够在我的 GUI 上写一些东西(insede a例如静态文本)。

我的第一个想法是让 func1 将一些信息写入 GUI 可以读取的文本文件中,但为此我需要某种多线程编程哦 GUI 方面,并且看起来 matlab 没有这样的东西。

其次,我试图让 func1 在与 GUI 相关的 .m 文件中调用 update(message) 函数,但它不起作用,因为 update 是一个子函数,似乎没有办法在包含它的文件。

请问有人可以帮我吗?对不起,我的英语不好。

4

1 回答 1

2

传递一个更新 UI 的对象,像引用一样使用它。

classdef WindowUpdater < handle
    properties(Access=private)
        textBox;
    end

    methods(Access=public)

        function this = WindowUpdater(textBox)
            this.textBox = textBox;
        end

        function Update(this,st)
            set(this.textBox,'String',st);
            drawnow();
        end        
    end

end

用你的文本 uicontrol 初始化它

h = uicontrol('Style','text');
wu = WindowUpdater( h);

把你的密集函数写成:

function foo(arg1,arg2,wu)
     %Do some stuff
     wu.Update('Hello world!');
     %Do some more stuff
     wu.Update('Hello world has finished!');
end

这种方法有一个巨大的软件优势:

  • 您的代码逻辑与 GUI 的更新是分开的:您可以将 WindowUpdater 替换为另一个 MyNewUpdater,它将写入控制台行,什么也不做,等等。
于 2011-12-25T12:13:03.177 回答