dart多线程双向通信的案例----【小学4年级课程】

dart多线程双向通信的案例----【小学4年级课程】_第1张图片

下面是运行后的打印顺序

I/flutter (20170): 上班
I/flutter (20170): 这里是校长室:main
I/flutter (20170): 这里是饭堂:fantang1
I/flutter (20170): 这里是收发室--检查小孩发回去给他妈妈的信息是:我是秘书的儿子,我来到在校长室了。校长今晚想吃羊肉
I/flutter (20170): 收发室1--允许小孩告知其母亲
I/flutter (20170): 收发室2----
I/flutter (20170): 这里是饭堂,收到我小孩发送来以下消息内容:我是秘书的儿子,我来到在校长室了。校长今晚想吃羊肉
I/flutter (20170): 并且收发室的小孩也过来了,我会让收发室的小孩发送我的回复会去的。
I/flutter (20170): 收发室的小孩从饭堂带回来了什么信息?:我是收发室的儿子,我在饭堂,秘书妈妈已经收到秘书儿子的信息了。秘书妈妈叫校长别做梦了。
I/flutter (20170): 下班

main.dart文件中的代码

import 'dart:isolate';
Future shouFaShi(SendPort who_son,message){
  ReceivePort shoufashi_mon=ReceivePort();
  SendPort shoufashi_son_1=shoufashi_mon.sendPort;
  print('这里是收发室--检查小孩发回去给他妈妈的信息是:'+message.toString());
  print("收发室1--允许小孩告知其母亲");
  who_son.send([message,shoufashi_son_1]);
  print("收发室2----");
  return shoufashi_mon.first;
}

main() {xiaozhangshi();}

void xiaozhangshi() async {
  print('上班');
  print("这里是校长室:"+ Isolate.current.debugName.toString());
  ReceivePort xiaozhang_mon = ReceivePort();
  SendPort xiaozhang_son_1 = xiaozhang_mon.sendPort;
  Isolate.spawn(fantang1, xiaozhang_son_1);
  SendPort who_child = await xiaozhang_mon.first;
  var message =await shouFaShi(who_child, "我是秘书的儿子,我来到在校长室了。校长今晚想吃羊肉");
  print("收发室的小孩从饭堂带回来了什么信息?:$message");

  print('下班');
}

void fantang1(SendPort xiaozhang_son_2) async {
  print("这里是饭堂:" + Isolate.current.debugName.toString());
  ReceivePort mishu_mon_1 = ReceivePort();
  SendPort mishu_son_2 = mishu_mon_1.sendPort;
  xiaozhang_son_2.send(mishu_son_2);
  await for (var msg in mishu_mon_1){
    var data =msg[0];
    print('这里是饭堂,收到我小孩发送来以下消息内容:$data');
    print('并且收发室的小孩也过来了,我会让收发室的小孩发送我的回复会去的。');
    SendPort which_son=msg[1];//第二个下标 指定下一个数据的发送人是谁,也就是校长组的发送人
    which_son.send("我是收发室的儿子,我在饭堂,秘书妈妈已经收到秘书儿子的信息了。秘书妈妈叫校长别做梦了。");
  }

}

你可能感兴趣的:(Dart,Dart,多线程双向通信,Flutter,安卓,ios)