この動作は、不具合ではなく、ソフトウェアの期待される動作です。ただし、弊社でもこの現象を認識しており、このニーズに対応できるよう、改善に取り組んでおります。
なお、全てのケースには適用できませんが、Figure がフォーカスを得るような原因を作る関数の使用を避けることにより、回避することができます。原因となる関数としては、FIGURE, AXES, GCF, GCA などが該当します。また、これらの関数を呼び出している関数も該当します。
例えば、次のようなコードを取り上げます。
c = 0;
for c = 1:10000
pause(1);
close all;
x = rand(1, 10);
y = rand(1, 10);
line(x, y);
set(gcf, 'Name', num2str(c));
end
このコードを以下のように再構成します。
f = figure;
a = axes;
c = 0;
for c = 1:10000
pause(1);
x = rand(1, 10);
y = rand(1, 10);
cla(a);
line(x, y, 'Parent', a);
set(f, 'Name', num2str(c));
end
ここでは、繰り返しごとに Figure を作成するのではなく、古い軸を CLA 関数でクリアしてその Figure に新しい軸を置きます。さらに、 GCA と GCF については、CLA、LINE、SET に適切なハンドルを渡すことで使用を回避することができます。