[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
前回は一方通行の通信でした。
子Isolateから親Isolateに情報を送りましたが、逆はありませんでした(SendPortオブジェクト以外)。
今回は、Isolate間でメッセージを相互に送ります。
import "dart:isolate"; void main() { ReceivePort fromSubIsolate = new ReceivePort(); Isolate.spawnUri( new Uri.file("subIsolate.dart"), [], fromSubIsolate.sendPort); SendPort sendPort = null; fromSubIsolate.listen((message){ if(message is SendPort){ sendPort = message; sendPort.send([1, 2]); } if(message is int){ print(message); } }); }
import "dart:isolate"; void main(List<String> args, SendPort sendPort){ ReceivePort fromMainIsolate = new ReceivePort(); sendPort.send(fromMainIsolate.sendPort); fromMainIsolate.listen((message){ List<int> parameters = message; sendPort.send(parameters.reduce((a, b) => a + b)); }); }
3
このプログラムは別のIsolateで1 + 2を計算します。
メインのIsolateでその計算結果である3を表示しています。
メインのIsolateでは最初に1と2を用意しています。
計算は子Isolateで行い、結果をメインに戻し、表示するのです。
SendPortでは、自分の作ったSendPortを送ることができます。
それを使って、親Isolateから子Isolateにメッセージを送っているのですね。
親Isolateは初めはSendPortしか送っていませんが、これによっていくらでもデータを送ることができるようになりました。