Main Content

wait

Simulink.Simulation.Job オブジェクトの状態が変わるまで待機する

説明

wait(simJob) は、simJob オブジェクトで特定されたジョブが 'finished' 状態に達するか失敗するまで、クライアント セッションでの実行をブロックします。これは、ワーカー上のすべてのシミュレーションの実行が終了したときに起こります。

wait(simJob,'stateOfJob') は、指定されたジョブ オブジェクトの状態が 'state' の値に変わるまで、クライアント セッションでの実行をブロックします。待機対象となる有効な状態は、'queued'、'running' および 'finished' です。オブジェクトが現在または既に指定の状態になっている場合は、wait は行われず、実行が直ちに再開されます。たとえば、既に 'finished' 状態にあるジョブに対して wait(simJob,'queued') を実行すると、呼び出しが直ちに戻されます。

wait(simJob,'stateOfJob',timeout) は、ジョブが指定された 'state' になるか、タイムアウトの秒数が経過するまで、実行をブロックします。

すべて折りたたむ

この例は、sldemo_househeat モデルを使用して、バッチ シミュレーションが終了するまで待機する方法を示します。

1. モデルを開きます。

open_system('sldemo_househeat');

2. さまざまな温度に対して一連の値を定義します。

setPointValues = 65:2:85;
spv_Length = length(setPointValues);

3. setPointValues を使用して、Simulink.SimulationInput オブジェクトの配列を初期化します。

in(1:spv_Length) = Simulink.SimulationInput('sldemo_househeat');
for i = 1:1:spv_Length 
    in(i) = in(i).setBlockParameter('sldemo_househeat/Set Point',...
        'Value',num2str(setPointValues(i)));
end

4. 使用するワーカー数のプール サイズを指定します。シミュレーションの並列実行に使用されるワーカー数に加え、ヘッド ワーカーが必要です。この例では、3 つのワーカーで並列シミュレーションの 1 つのバッチジョブを実行できると仮定します。ジョブ オブジェクトは、以下のように有用なメタデータを返します。ジョブ ID を使用すると、後で任意のマシンからジョブ オブジェクトにアクセスできます。NumWorkers は、シミュレーションを実行中のワーカー数を示します。これは、'Pool' 引数で指定したワーカー数に追加のヘッド ワーカーを足した数になります。

simJob = batchsim(in,'Pool',3)
                  ID: 1
                Type: pool
          NumWorkers: 4
            Username: #####
               State: running
      SubmitDateTime: ##-###-#### ##:##:##
       StartDateTime: 
    Running Duration: 0 days 0h 0m 0s

5. ここで、出力を取得する前に、ジョブが終了するまで待機します。

wait(simJob)

入力引数

すべて折りたたむ

Simulink.Simulation.Job オブジェクト。simJob を作成するには、batchsim を実行します。

例: simJob = batchsim(in,'Pool','5')

待機する Simulink.Simulation.Job オブジェクトの State プロパティの値。

例: wait(simJob,'queued')

wait で実行をブロックする際のタイムアウトを秒単位で指定します。

例: wait(simJob, 5)

バージョン履歴

R2018b で導入