Dart Isolate多线程=>进程

Isolate 单项通信《新线程发消息给主线程<mian>》

main(){
  ///创建接收端口
  ReceivePort r1 = ReceivePort();

  ///创建发送端口
  SendPort p1 = r1.sendPort;

  ///参数1(isoFunc0 -> 函数参数1传入发送端口对象 ) => 静态函数或顶级函数,参数2(p1) => 发送端口对象
  Isolate.spawn(isoFunc0, p1);

  ///接收新线程发送过来的消息
  // 第一种接收方法
  var msg = r1.first.then((value) => print("来自新线程的消息 $value"));

  ///第二种接收方法
  r1.listen((message) {
    print(message);
    // r1.close(); //结束新线程
  });
}


///新线程函数
void isoFunc0(SendPort p1) {
  p1.send("当前线程名称: ${Isolate.current.debugName}");
}

Isolate 双向通信<新线程发消息给主线程|主线程发消息给新线程>

main{
  //创建接收端口
  ReceivePort r1 = ReceivePort();
  //创建发送端口
  SendPort p1 = r1.sendPort;
  //参数1(isoFunc0 -> 函数参数1传入发送端口对象 ) => 静态函数或顶级函数|参数2(p1) => 发送端口对象
  Isolate.spawn(isoFunc0, p1);

  //接收新线程发送来的消息
  r1.listen((message) {
    //由于可接收任何类型的消息所以判断下类型在发送给新线程
    if (message is SendPort) {
      message.send("主线程发消息给新线程: ${Isolate.current.debugName}");
    }else{
      print(message);
    }
    // r1.close(); //结束新线程,结束后将不能通信
  });
}

///新线程函数
void isoFunc0(SendPort p1) {
  p1.send("新线程给主线程发消息: ${Isolate.current.debugName}");

  //创建接收端口
  ReceivePort r2 = ReceivePort();
  //创建发送端口
  SendPort p2 = r2.sendPort;
  //把发送端口对象->发消息给主线程
  p1.send(p2);

  //接收主线程发来的消息
  r2.listen((message) {
    print(message);
    // r2.close(); //结束新线程,结束后将不能通信
  });

}
THE END
喜欢就支持一下吧
点赞12 分享