提供: Japanese Scratch-Wiki

2020年9月7日 (月) 14:47時点におけるApple502j (トーク | 投稿記録)による版

このきじは ひらがなのページがありません。ごめんなさい。編集者向け:作成する

スレッド(英: thread)は、Scratchのプログラムを実行する際の最小単位で、多くの場合1スクリプトが1スレッドに対応する。シーケンサー(英: sequencer)は、スレッドの動作を制御する。

Scratchのプログラムは、実際には同時実行しない。以下の順位で実行される:

スレッド

スレッドは、各スクリプトを表現している。ただし、定義ブロックは、呼び出し元のスレッドによる実行となり、定義ブロック用のスレッドによって行われるわけではない。スレッドには以下の状態がある:

定数 説明
STATUS_RUNNING 0 スレッドは実行中。
STATUS_PROMISE_WAIT 1 スレッドは非同期で実行されていて、実行完了を待っている。
STATUS_YIELD 2 スレッドの次の実行まで待つ。
STATUS_YIELD_TICK 3 次のフレームまで待つ。
STATUS_DONE 1 スレッドは実行を終了した。

フレーム

Scratchは、1秒間に30回描画する。(フレーム)そして、シーケンサーは、以下の条件をすべて満たす限り、1フレーム内で可能な限り多くのスレッドを実行する:

  • 実行時間は、1フレームの75%未満(25ミリ秒程度)
  • STATUS_DONEではないスレッドが存在する。
  • フレーム内の2回目以降の実行では、STATUS_RUNNINGであるスレッドが存在する。
  • ターボモードであるか、またはステージの再描画が要求されていない。

1フレーム内の動作順序は次の通り:

  • 強制的に終了させられたスレッドを当該フレームの実行対象から外す。
  • 条件駆動のハットブロックを実行させる。
  • ステージモニターの値の更新を予約する。
  • タイマーを更新する。
  • スレッドの実行。(ステージモニターの値の計算を含む)
  • スクリプトのハイライトを更新する。
  • 緑の旗のハイライトを更新する。
  • ステージを描画する。
  • スプライト情報を更新する。
  • ステージモニターを更新する。

スタックとスタックフレーム

スレッドは、スタックの集まりである。1つのスタックは、1つのスタックブロックや、それに接続できるブロック(C型ブロックやハットブロック、キャップブロックなど)を表している。それぞれのスタックには、「スタックフレーム」というものがあり、そのスタックに関する情報を保管する。たとえば、() 回繰り返すブロックは、残りの繰り返し回数をスタックフレームに保管している。

Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。