[英]Responsive MATLAB GUI without calling drawnow() directly
關於MATLAB的事實:
我的問題:
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.