55328


2秒ごとに3回「Transmit」を表示しながら、その期間同様に「Plot」を別の関数で表示させようとしています。  
MATLABのバージョンはR2017bで、実行環境はWindowsです。

for ループが終了するまでの期間は、plotData 関数を続けて、for ループを終了したら、プロット関数の実行も停止するようにしたいです。

フラグ"stat" がtrueの時にプロットを続ける、フラグが false
のときにプロットを停止という制御をしていますが、機能せず、どのように修正したらいいかわからない状態です。  
plotはどうしても関数呼び出しをする必要があり、これらの制御方法についてアドバイスをいただきたいです。

[code]

    %data
    global accumulateData
    
    %status
    global stat
    stat = true;
    if(stat == true)
        %h = addlistener(s, 'DataAvailable', @plotData);
        h =  @plotData;  
    end
    
    %Transmit 3 times every 2 seconds
    for i = (1:3)-1
    
        if i == 3
            fprintf("end\n");
            pause(2)
            stat = false;
            exit();
        end
        fprintf("Transmit\n");
        pause(2);
    end
    
    
    function plotData(src, event)
       %plot(event.TimeStamps, event.Data);
       fprintf("plot\n");
    end
    
[/code]

出力

[code]

    >> untitled
    Transmit
    Transmit
    Transmit
    
[/code]


CC BY-SA 4.0
2019-05-29T01:31:54.900
55326
2019-05-29T02:55:18.603
question
c matlab
MATLAB でフラグを制御する方法について


`tic`関数と`toc`関数を利用して、経過時間を計算すればいいのではないでしょうか。

[code]

    % ループ終了条件
    repeat = 3;
    count = 0;
    
    % 開始時間の設定
    starttime = tic;
    
    % 次に transmit する時間
    nextTrans = 0;
    
    while true
        elapsedTime = toc(starttime); % 経過時間の計算
        if elapsedTime >= nextTrans   % transmit する時間になったかどうかチェック
            disp("transmit")
            count = count + 1;
    
    　　　　 % repeat 回 transmit したらループを抜ける
            if count >= repeat
                break
            end
    
            % 次の transmit 時間の設定
            nextTrans = nextTrans + 2;
        end 
    
        % ここで plot
    end
    
    disp("end")
    
[/code]


CC BY-SA 4.0
2019-05-29T02:55:18.603
55328
2019-05-29T02:55:18.603
3605
55326
answer