コールバックを割り込​みして中断し、MAT​LABがそのコールバ​ックに戻らないように​するにはどうすれば良​いですか?

8 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2012 年 9 月 4 日
編集済み: MathWorks Support Team 2020 年 3 月 4 日
コールバックを含むGUIを作成しています。ループ中にコールバックが割り込みをされたとき、MATLABは割り込みをした関数が実行された後に中断されたコールバックの実行を終えるためにループに戻ります。しかし、割り込んだ関数の実行を終了すると同時に元のループには戻らずに終了したいと考えています。
UICONTROL の 'Interruptible' や 'BusyAction' プロパティを試しましたが、上記の動作を実現することができませんでした。
例えば、testinterrupt.m ファイルでは、1回目のループに入った後にプッシュボタンを押すと、MATLAB は2回目のループに入り、そのループが終わった後に1回目のループに戻ってしまいます。
>> testinterrupt
を実行し、Run Loop を押してください。Loop 1 が終了する前に Loop 2 を開始した場合、Loop 2 を終了した後に Loop 1 の実行を終了させるために Loop 1 に戻ります。

採用された回答

MathWorks Support Team
MathWorks Support Team 2020 年 3 月 6 日
編集済み: MathWorks Support Team 2020 年 3 月 4 日
MATLAB には、割り込み関数が終了した後に中断された関数を止める機能は備えておりません。
しかし、添付 interrupt_stop.m のようにループ内に上記のようなロジックを記述することで可能になります。特に PushButton1 のコールバック構造をご覧ください。プログラムを実行するにはMATLAB コマンドウィンドウで以下を入力してください。
>> interrupt_stop
test_interrupts.m と同様に、Run Loop を押してください。Loop 1 が終了する前に Loop 2 を開始させた場合、Loop 2 が終了しても Loop 1 には戻りません。
FOR ループの中でコールバックが一度割り込みされると、割り込みをした関数が実行され、FORループに戻ります。結果的に、TRUE 条件で IF 文に戻るため RETURN コマンドの実行につながります。そのため、元のコールバックの実行が停止されます。
この例では、SETAPPDATA と GETAPPDATA が使用されています。これらの関数は例の中での "Callbackrun" にあたるようなユーザ定義のプロパティの作成を許可しています。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeループと条件付きステートメント についてさらに検索

製品


リリース

R2006b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!