首页 > 其他分享 >Isolate线程通信 flutter

Isolate线程通信 flutter

时间:2024-03-01 11:00:44浏览次数:21  
标签:sendPort 端口 SendPort Isolate ReceivePort 线程 flutter

A、B互传消息

A、B都创建自己的 接收端口和发送端口

A将自己的发送端口发送给对面B,B才能拿到A的发送端口,给A发送消息

A监听自己的接收端口,拿到B发给自己的消息

B监听自己的接收端口,拿到A发给自己的消息

void function_main() async {
    print("当前线程:"+ Isolate.current.debugName);
    // 创建主线程ReceivePort对象用来监听回调的数据
    var receivePort = new ReceivePort();
    // 把主线程SendPort对象发送到子线程
    await Isolate.spawn(entryPoint, receivePort.sendPort);

    receivePort.listen((message) {
      SendPort sendPort = message;
      // 用子线程发送过来的SendPort对象-发送数据,-》子线程就会收到通知
      sendPort.send("回复给子线程的内容");
      // 关闭监听
      receivePort.close();
    });
  }
  void entryPoint(SendPort sendPort) async {
    // 创建子线程ReceivePort对象
    var port = new ReceivePort();
    // 把子线程SendPort对象发送到主线程
    sendPort.send(port.sendPort);
    // 这里是接收到 主线程给回复的内容
    await for (var data in port) {
      print("data $data");
    }
  }

 

 

https://www.jianshu.com/p/0f9250e92712

标签:sendPort,端口,SendPort,Isolate,ReceivePort,线程,flutter
From: https://www.cnblogs.com/huangzs/p/18046504

相关文章

  • 多线程文件拷贝
    多线程文件拷贝#include<stdio.h>#include<pthread.h>#include<unistd.h>#include<stdlib.h>#include<assert.h>#include<sys/mman.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#inclu......
  • 内存与垃圾回收篇之(三)运行时数据区概述及线程
    运行时数据区概述及线程1.概述经过类加载器子系统之后,方法区中就保存了运行时类本身。​ 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。......
  • JUC系列之(八)Condition控制线程通信
    Condition控制线程通信对象等待唤醒唤醒所有Objectwait()notify()notifyAll()Conditionawait()signal()signalAll()Lock同步锁的线程通信需要通过Condition实现通过Lock+Condition实现上一节最后的生产者消费者案例packagecom.atguigu.juc;importj......
  • Qt 多线程中使用QTimer和信号、槽 QObject::startTimer: Timers cannot be started fr
    多线程中使用QTimer我们可能在Qt的多线程中使用QTimer中都会遇到一个错误:Cannotcreatechildrenforaparentthatisinadifferentthread.或者QObject::startTimer:TimerscannotbestartedfromanotherthreadQTimer定时器不能在不同的线程中启动。出现这个主要原因......
  • Qt 多线程中使用信号槽的示例
    之前对线程理解得不深入,所以对Qt的线程机制没有搞清楚,今天写一篇文章总结一下,如有错误,欢迎指出。    首先需要理解线程是什么,线程在代码中的表现其实就是一个函数,只不过这个函数和主线程的函数同时运行,写C语言的都知道,一般代码是从main()函数开始运行的,每个线程都有一......
  • Flutter 页面跳转并返回数据
     主页面FutureonSubmit()async{finalresult=awaitGet.to(constPageGoodsSelectList());print(result.name);goodsId.value=result.id;setState((){goodsname.value=result.name;});}调用onSubmit跳转到下一个页面 onChildT......
  • 进程和线程
    进程拥有资源,包括:内存空间中的代码、数据等;I/O资源;打开文件;CPU等。线程执行任务,线程只拥有CPU和少量寄存器,线程之间共享进程的资源。为什么需要线程进程切换开销大,主要包括:CPU的上下文切换:保存和恢复相关寄存器的内容进程相关的数据结构切换:页表、文件描述符、消息队列等.......
  • C++ 多线程笔记1 线程的创建
    C++多线程笔记1线程的创建里面代码会用到的头文件#include<iostream>#include<string>#include<memory>#include<thread>#include<vector>#include<stdlib.h>#include<cmath>#include<chrono>#include<ctime>入门例子vo......
  • c++ queue在多线程中的使用
    queue队列,先进先出。多线程的一种使用案例:生产者每3spush一个元素消费者每5s才能pop一个元素(队首)那么,2个消费者就可以及时地消耗掉push的元素。#include<iostream>#include<thread>#include<mutex>#include<queue>std::queue<int>m_queue;std::mutexm_mutex;std:......
  • 为什么iOS包比Android包大 flutter
    由于Android系统已经内置了Skia,所以Flutter在打包APK(Android应用安装包)时,不需要再将Skia打入APK中,但iOS系统并未内置Skia,所以构建iPA时,也必须将Skia一起打包 安卓1.在debug模式下,so库打入了x86_64、x86、arm64-v8a,总共22.28M2.在release模式下,so库只有armeabi-v7a,总共3.4......