実際の開発では、読み込みの処理は更に複雑になることがあります。例えば、まず XML を読んで、その内容を元に、画像ファイルを読み込んで表示する、といった処理です。
これを ActionScript Thread Library を使って書いてみると次のようになります。
import org.libspark.thread.Thread;
import org.libspark.thread.threads.net.URLLoaderThread;
import org.libspark.thread.threads.display.LoaderThread;
import org.libspark.thread.utils.SerialExecutor;
public class LoadXMLandImageThread extends Thread
{
private var _loader:URLLoaderThread;
private var _loaders:SerialExecutor;
override protected function run():void
{
// XML を読み込む
_loader = new URLLoaderThread('images.xml');
_loader.start();
_loader.join();
next(loadXMLComplete);
}
private function loadXMLComplete():void
{
// 読み込んだ XML から更に画像を読み込むスレッドを作成して実行する
_loaders = new SerialExecutor();
var xml:XML = XML(_loader.loader.data);
for each (var item:XML in xml.item) {
_loaders.addThread(new LoaderThread(new URLRequest(String(item))));
}
_loaders.start();
_loaders.join();
next(loadImagesComplete);
}
private funciton loadImagesComplete():void
{
// 表示処理など...
}
}
ここで、次のクラスが新しく登場しています。
はじめに、URLLoaderThread を用いて「image.xml」を読み込んでいます。読み込みが完了すると、next メソッドによって指定された loadXMLComplete メソッドが呼び出されます。
loadXMLComplete メソッドでは、読み込んだ XML の item 要素を取得し、そこに書かれているファイル名の画像を読み込む LoaderThread を作成して、SerialExecutor に追加しています。
たとえば、images.xml が次のような内容であった場合、
<items> <item>a.jpg</item> <item>b.jpg</item> <item>c.jpg</item> </items>
「a.jpg」「b.jpg」「c.jpg」がそれぞれ LoaderThread によって読み込まれます。読み込みが完了すると、next メソッドによって指定された loadImagesComplete メソッドが呼び出されます。
このように、ActionScript Thread Library では、Thread の start メソッド、join メソッド、next メソッドなどを組み合わせて、処理を柔軟に記述することが出来ます。