簡體   English   中英

響應式MATLAB GUI,無需直接調用drawow()

[英]Responsive MATLAB GUI without calling drawnow() directly

關於MATLAB的事實:

  1. MATLAB UI是Java Swing。
  2. MATLAB與Java具有出色的互操作性,可以初始化Java對象並直接從MATLAB代碼調用它們的方法,甚至可以將MATLAB定義的監聽器傳遞給Java!

我的問題:

MATLAB不提供后台線程,因此為了使MATLAB UI響應,我們必須調用刷新Swing EDT隊列的函數drawow ,也可以在這里這里看到。 這是一個眾所周知的事實,到目前為止一直很好。

但現在我有一個客戶,其代碼執行的計算是一個MATLAB對文件(加密),所以我的代碼沒有獲得放drawnow那里。

不成功的嘗試:

我試圖紡紗一個計時器做主叫的工作drawnow但它似乎沒有工作-定時器本身需要一個先例drawnow火的回調。

編輯:最后我實現了GUI與.NET / WPF在另一個線程上運行,因此它始終響應並且看起來比原始MATLAB好得多。

我不知道這是否可以正常完成。 我從未找到過在mex文件中間獲得drawow效果的方法,我猜這種情況類似。 但無論如何,這里是一個令人難以置信的混亂黑客:D。 如果你有一個p文件,你可以運行:

profile on;
pfile();
profile viewer;

並了解pfile()正在調用的函數。 如果代碼調用任何內置函數(例如disp)或您可以訪問其源代碼的任何函數,則可以在路徑的更上方創建自己的文件版本,該文件將由p文件調用,例如

function disp(X)
  if (toc > 5)
    drawnow;
    tic;
  end
  builtin('disp', X);

這將最多每5秒調用一次drawow,盡管除非定期調用disp,否則它將沒有多大用處。 如果你找不到要覆蓋的內置,你可以使用任何其他功能,只需在頂部插入drawow部分,如:

function primes(N)
  if (toc > 5)
    drawnow;
    tic;
  end
  The rest of the original primes.m here.

只是一個想法。 您可以使用Matlab builder for java從p文件構建一個jar文件。 在Java中,您現在可以在單獨的線程中進行計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM