thread関数
Processingにおけるthread関数は、setup関数を最初に実行した後、ループ内でdraw関数を何度も繰り返し実行します。
スレッドは、開始、中間、終了の一連のステップでもあります。
処理スケッチは、「アニメーション」スレッドと呼ばれることが多い単一のスレッドです。
しかし、他のスレッドのシーケンスは、メインのアニメーションループとは独立して実行できます。
実際には、一度に任意の数のスレッドを起動することができ、それらはすべて同時に実行されます。
thread関数が呼び出す関数から画面に描画することはできません。
独立して実行されるため、コードはアニメーションスレッドに同期されず、奇妙な結果や少なくとも一貫性のない結果が発生します。
スレッドを使用してファイルをロードするか、時間がかかる他のタスクを実行します。
タスクが終了したら、タスクが完了したことを示す変数を設定し、draw関数メソッドの内側からチェックします。
Processingは、captureEvent関数やmovieEvent関数などのライブラリ関数など、スレッドを頻繁に使用します。
これらの関数は、バックグラウンドで実行されている別のスレッドによってトリガされ、何か報告する必要があるときに処理を警告します。
これは、時間がかかりすぎてメインアニメーションのフレームレート(ネットワークからデータを取得するなど)が遅くなるタスクを実行する必要がある場合に便利です。
別のスレッドがスタックしたり、エラーが発生した場合、エラーは個々のスレッドのみを停止させるため、プログラム全体が停止することはありません。
独自のスレッドを書くことは、Javaスレッドクラスの拡張を伴う複雑な作業になります。
しかし、thread関数メソッドは、Processingで簡単なスレッドを実装するための素早く汚い方法です。
スケッチの他の場所で宣言された関数の名前と一致するStringを渡すことによって、Processingは別のスレッドでその関数を実行します。
Processingで使用するthread関数の使い方は以下の通りです。
String time = "";
void setup() {
size(100,100);
}
void draw() {
background(0);
//Every 30 frames request new data
if(frameCount % 30 == 0) {
thread("requestData");
}
text(time,10, 50);
}
// This happens as a separate thread and can take as long as it wants
void requestData() {
JSONObjectjson = loadJSONObject("http://time.jsontest.com/");
time = json.getString("time");
}
図2:プログラム実行結果
〇thread関数の構文
thread(name)
〇thread関数のパラメータ
name:別のスレッドで実行される関数の名前(String)
〇thread関数の戻り値
void