2011-12-25 36 views
1

這裏是我的問題,我有GUI和函數(func1)寫在我的數字的.m文件之外。我也有我的GUI,當按下啓動FUNC1,現在這個功能是非常CPU密集型,可能需要大量的完成日常前的定時按鈕,這就是爲什麼我會的功能,能寫的東西在我的GUI(insede一例如靜態文本)。如何從CPU密集型功能更新GUI元素?

我的第一個想法是讓func1在GUI可以讀取的文本文件中寫入一些信息,但是爲此我需要一些類似的多線程編程GUI界面,看起來像matlab沒有這樣的東西。

第二個地方,我試圖讓func1調用一個更新(消息)函數insede與GUI相關的.m文件,但它沒有工作,因爲更新是一個子函數,似乎沒有辦法調用包含它的文件外部的分部。

可以請人幫我嗎?對不起,我的英語不好。圍繞更新UI對象

回答

2

通行證,有了它的工作就像一個參考。

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 

這種方法有一個巨大的SW優勢:

  • 你的代碼邏輯與GUI的更新分離:你可以用另一個MyNewUpdater將寫入控制檯線,什麼也不做,等更換WindowUpdater ..
+0

謝謝你,它的工作!只是我不明白「這個」關鍵字在這裏「的功能此= WindowUpdater(textBox中)」,在這裏「功能更新(這一點,ST)」 – 2011-12-25 14:38:43

+0

它與面向對象設計做。在互聯網上閱讀一些關於它的東西,這太寬泛了,不能在這裏解釋 – 2011-12-25 14:42:37