Mik*_*ail 13 java matlab user-interface swing
关于MATLAB的事实:
我的问题:
MATLAB不提供后台线程,因此为了使MATLAB UI响应,我们必须调用刷新Swing EDT队列的函数drawow,也可以在这里和这里看到.这是一个众所周知的事实,到目前为止一直很好.
但是现在我有一个客户,其执行计算的代码是一个MATLAB p文件(加密),因此我无法访问代码drawnow.
不成功的尝试:
我尝试使用计时器来完成调用的工作,drawnow但它似乎不起作用 - 计时器本身需要一个先例drawnow来触发它的回调.
编辑:最后我实现了GUI与.NET/WPF在另一个线程上运行,因此它始终响应并且看起来比原始MATLAB好得多.
我不知道这是否可以正常完成.我从未找到过在mex文件中间获得drawow效果的方法,我猜这种情况类似.但无论如何,这里是一个令人难以置信的混乱黑客:D.如果你有一个p文件,你可以运行:
profile on;
pfile();
profile viewer;
Run Code Online (Sandbox Code Playgroud)
并了解pfile()正在调用的函数.如果代码调用任何内置函数(例如disp)或您可以访问其源代码的任何函数,则可以在路径的更上方创建自己的文件版本,该文件将由p文件调用,例如
function disp(X)
if (toc > 5)
drawnow;
tic;
end
builtin('disp', X);
Run Code Online (Sandbox Code Playgroud)
这将最多每5秒调用一次drawow,尽管除非定期调用disp,否则它将没有多大用处.如果你找不到要覆盖的内置,你可以使用任何其他功能,只需在顶部插入drawow部分,如:
function primes(N)
if (toc > 5)
drawnow;
tic;
end
The rest of the original primes.m here.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |