timer オブジェクトを含むスタンドアロンアプリケーションが期待通りの動作をしないのはなぜですか?
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
MathWorks Support Team
el 21 de Sept. de 2023
Respondida: MathWorks Support Team
el 21 de Sept. de 2023
timer オブジェクトを含む .m ファイルを MATLAB Compiler でスタンドアロンアプリケーション化しました。実行させてみると、指定回数の実行前に終了してしまうなど、期待通りの動作となりません。
testTimer.m:
-------------------------
function testTimer
i = 1;
t = timer('TimerFcn', @time_cbf, 'Period', 1, 'ExecutionMode', 'fixedRate', 'TasksToExecute', 10);
start(t);
function time_cbf(obj, event)
t = obj;
disp(i);
i = i + 1;
if i>10
stop(obj);
end
end
end
-------------------------
MATLAB 環境上での実行例:
-------------------------
>> testTimer
1
2
3
4
5
6
7
8
9
10
-------------------------
コマンドプロンプトでの実行例(1回のみ実行される):
-------------------------
>testTimer
1
-------------------------
Respuesta aceptada
MathWorks Support Team
el 21 de Sept. de 2023
原因はスタンドアロンアプリケーションがタイマーオブジェクトのstopコマンド実行時にどのようにプログラムを終了させるかによるものです。一般的にはタイマーオブジェクトのコールバック関数はコールバック関数が終了時にスタンドアロンアプリケーションも終了させます。
これを回避するためには、メインルーチン内でタイマーオブジェクトのスタート後、MATLABのビルトイン関数であるwaitfor関数を使用し、タイマーオブジェクトが終了するまで待つようにします。
修正例:
-------------------------
function testTimer
i = 1;
t = timer('TimerFcn', @time_cbf, 'Period', 1, 'ExecutionMode', 'fixedRate', 'TasksToExecute', 10);
start(t);
waitfor(t); %waitforを追加
function time_cbf(obj, event)
t = obj;
disp(i);
i = i + 1;
if i>10
stop(obj);
end
end
end
-------------------------
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre C 共有ライブラリの統合 en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!