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

news/2024/7/20 20:35:13 标签: Dart, 多线程双向通信, Flutter, 安卓, ios

在这里插入图片描述

下面是运行后的打印顺序

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("我是收发室的儿子,我在饭堂,秘书妈妈已经收到秘书儿子的信息了。秘书妈妈叫校长别做梦了。");
  }

}

http://www.niftyadmin.cn/n/5223603.html

相关文章

JDBC概述(什么是JDBC?JDBC的原理、Mysql和Sql Server入门JDBC操作)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍JDBC概述(什么是JDBC?JDBC的原理、Mysql和Sql Server入门JDBC操作)简单知识以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 &a…

【PHP】MySQL简介与MySQLi函数(含PHP与MySQL交互)

文章目录 一、MySQL简介二、MySQLi函数1. 开启mysqli扩展:2. PHP MySQLi扩展的常用函数 三、PHP与MySQL交互0. 准备1. 创建连接(mysqli_connect() )连接mysql语法 2. 选择数据库(mysqli_select_db())3. 在php中操作数据…

前端---JavaScript篇

1. 介绍 JavaScript 是 前端开发人员必须学习的 3 门语言中的一门: HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 接下来开始详解JavaScript。 2.引入方法 js有两种导入方式,一种是内部脚本:直接在html页面中…

Java后端开发——JDBC(万字详解)

Java后端开发——JDBC(万字详解) 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1,JDBC概述 在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 …

monorepo多项目管理主流实现方式:1.learn + yarn/npm workspace 2.pnpm

npm域级包 随着npm包越来越多,而且包名也只能是唯一的,如果一个名字被别人占了,那你就不能再使用这个名字;假设我想要开发一个utils包,但是张三已经发布了一个utils包,那我的包名就不能叫utils了&#xff…

vue创建公共指令文件并引入

创建公共js文件 globalDirective.js // globalDirective.js export default {install(Vue) {Vue.directive(global-name, { // 指令名// 指令});} };在main.js文件内引入 // main.js import globalDirectives from ./globalDirectives; Vue.use(globalDirectives);在vue文件中…

rss服务搭建记录

layout: post title: RSS subtitle: vps搭建RSS服务 date: 2023-11-27 author: Sprint#51264 header-img: img/post-bg-universe.jpg catalog: true tags: - 折腾 文章目录 引言RSShub-dockerRSS-radarFreshrssFluent reader获取fever api配置Fluent Reader同步 结语 引言 一个…

LabVIEW通过编程将图形类控件的X轴显示为时间戳

LabVIEW通过编程将图形类控件的X轴显示为时间戳 每个版本的LabVIEW中都有属性节点,可以以编程方式调整X轴和Y轴格式。对于不同版本的LabVIEW,这些属性节点无法在同一个位置找到。请参阅以下部分,了解特定版本LabVIEW的相关属性节点的位置。 …