timer オブジェクトを含むスタンドアロンアプリケーションが期待通りの動作をしないのはなぜですか?
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
MathWorks Support Team
il 21 Set 2023
Risposto: MathWorks Support Team
il 21 Set 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
-------------------------
Risposta accettata
MathWorks Support Team
il 21 Set 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 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su COM コンポーネントの統合 in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!