java暂停另一个线程_如何从另一个线程终止或暂停Rust线程?

对于终止和挂起线程,您可以使用通道 .

外部终止

在工作循环的每次迭代中,我们检查是否有人通过渠道通知我们 . 如果是,或者如果通道的另一端超出范围,我们就会打破循环 .

use std::io::{self, BufRead};

use std::sync::mpsc::{self, TryRecvError};

use std::thread;

use std::time::Duration;

fn main() {

println!("Press enter to terminate the child thread");

let (tx, rx) = mpsc::channel();

thread::spawn(move || loop {

println!("Working...");

thread::sleep(Duration::from_millis(500));

match rx.try_recv() {

Ok(_) | Err(TryRecvError::Disconnected) => {

println!("Terminating.");

break;

}

Err(TryRecvError::Empty) => {}

}

});

let mut line = String::new();

let stdin = io::stdin();

let _ = stdin.lock().read_line(&mut line);

let _ = tx.send(());

}

暂停和恢复

我们使用 recv() 暂停线程,直到某些东西到达通道 . 为了恢复该线程,您需要通过该 Channels 发送内容;在这种情况下单位值 () . 如果通道的发送端被丢弃, recv() 将返回 Err(()) - 我们使用它来退出循环 .

use std::io::{self, BufRead};

use std::sync::mpsc;

use std::thread;

use std::time::Duration;

fn main() {

println!("Press enter to wake up the child thread");

let (tx, rx) = mpsc::channel();

thread::spawn(move || loop {

println!("Suspending...");

match rx.recv() {

Ok(_) => {

println!("Working...");

thread::sleep(Duration::from_millis(500));

}

Err(_) => {

println!("Terminating.");

break;

}

}

});

let mut line = String::new();

let stdin = io::stdin();

for _ in 0..4 {

let _ = stdin.lock().read_line(&mut line);

let _ = tx.send(());

}

}

其他工具

Channels 是执行这些任务的最简单,最自然(IMO)的方式,但不是最有效的方法 . 您可以在std::sync模块中找到其他并发原语 . 它们属于比通道更低的级别,但在特定任务中可以更有效 .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 7 jboss_JBoss7 入门指南

1、下载地址: http://www.jboss.org/jbossas/downloads ,下载Certified Java EE 6 Full Profile版本。2、解压 jboss-as-7.1.1.Final.zip 到 D:\programs。3、设置环境变量如下:系统变量->新建->变量名:JAVA_HOME C:\Java以…

java实现bloom filter_Java BloomFilter.add方法代码示例

import org.apache.hadoop.util.bloom.BloomFilter; //导入方法依赖的package包/类Overridepublic int run(String[] args) throws Exception {if (args.length ! 4) {System.err.println("Usage: Trainer ");return 1;}// Parse command line argumentsPath inputFi…

java系统项目分为哪五大层次?控制层_业务_一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转...

表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的,DAO层就是将访问数据库的代码,数据库层是数…

opc客户端读取数据品质是bad_听说看了这篇文章就彻底搞懂了什么是OPC(上)

从2000年初以来,我们就一直在使用OPC软件互操作性标准,而那些正准备踏入和想要踏入工业自动化领域的人们却对这些含义感到困惑。所以在本中,我将系统地为你梳理OPC知识。OPC首字母缩写词代表什么?问一个OPC老手,他们或…

java怎么将程序保存在桌面_在Java桌面应用程序中保留数据的最佳方法是什么?...

我的桌面应用程序中有一大堆Java对象,我试图决定将文件作为文件系统的最佳方式.我曾经有过一些想法:>使用DataOutputStream滚动我自己的串行器:这将给我最大的控制文件中的内容,但是以微量管理为代价.>使用ObjectOutputStream及其各种相关类的直接…

JAVA实现inotify一样的功能_WPF实现INotifyPropertyChanged

我已经设置了一个属性并实现了INotifyPropertyChanged像这样......public event PropertyChangedEventHandler PropertyChanged;public FlowProcess LastSelectedFlowProcess{get { return _lastSelectedFlowProcess; }set{_lastSelectedFlowProcess value;Notify("LastS…

php导入json文件_[php]导入超大json文件

前言在之前的文章《做一个twitter的插件玩玩》中,我做了一个批量删除推文(转发推文)的工具,该工具能够删除前3200条推文,但因为总数太多(4.3万条),api接口不支持获取所有的推文,所以我采用了下载的方式,直接…

php 生成dbf,php 读取vfp 8.0,9.0所产生的dbf文件

VFP 9.0 PHP odbc求大神指导。。。由VFP8.0以上制造的DBF文件,自带的Tabel Type> autoinc field 或者Blob field,想通过PHP读取,不行吗?代码很简单如下》$add’c://BatMan//Daten//ladert2.DBF’;$e”Driver{Microsoft Visual …

linux怎样写java代码,linux 怎么写java

linux 怎么写java一、环境安装由于使用 yum 或者 apt-get 命令 安装 openjdk 可能存在类库不全,从而导致用户在安装后运行相关工具时可能报错的问题,所以此处我们推荐采用手动解压安装的方式来安装 JDK。具体步骤如下:1.下载 JDK进入Oracle官…

java登陆密码验证失败,java用户名密码验证示例代码分享

类:NameII 权限:public方法:main 权限:public参数:name,password,denglu,i;参数介绍:name,数据类型 String ,用来存储一个从 input 中获取的值,在本程序当中用作用户名的存放;password,数据类型 String &#xf…

php 五角星,php使用GD库画五角星_PHP教程

01 $width 500;02 $height 500;0304 $im imagecreatetruecolor($width, $height);0506 $red imagecolorallocate($im, 230, 0, 0);07 imagefill($im, 0, 0, $red);0809 $yellow imagecolorallocate($im, 255, 255, 0);1011 //设定画出五角星的五个顶点形成的 正五边形的边…

java的配置文件后缀,Java - 敏感配置文件位置

0x00 前言项目中常遇到Java站点,像SSM、springboot这些框架开发的通常一些配置文件都在固定的位置,当然还有Tomcat容器的配置文件。0x01 记录1.properies配置文件这个文件的作用很重要,通常是一个JavaWeb项目中的配置文件,以.prop…

apmserv 5.2.6 升级php,APMServ5.2.6 升级PHP版本 到高版本 5.3,5.4

Thursday, December 12, 2013 1:59 AM 17173606 php-5.3.28-Win32-VC9-x86.zipranhou 然后解压,得到一个新的目录:把原来APMServ目录中的PHP目录中的:ext , extras 两个目录复制过来,遇到重复文件,不要覆盖…

php原生sql语句删除,PHP 的批量删除sql语句

PHP 的批量删除sql语句发布于 2014-10-07 22:57:44 | 92 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门…

php 正则mac地址,正则表达式匹配MAC地址、邮箱地址、IP地址

(1)匹配MAC地址1)MAC地址由12个16进制的字母组成2)16个字母是 0~9、a~f 。不区分大小写,一般为大写3)每两个字母为一组,共六组,每组间用冒号:隔开匹配思路:00:0C:29:88:83:1A1)先匹配前两个字母;用元字符[] 匹配单个字…

超级好用的一个php上传图片类(随机名_缩略图_加水印),超级好用的一个php上传图片类(随机名,缩略图,加水印)...

Upimages.class.php php上传类复制代码 代码如下:class UpImages {var $annexFolder "upload";//附件存放点,默认为:annexvar $smallFolder "small";//缩略图存放路径,注:必须是放在 $annexFolder下的子目录…

java pair class,在Java Pair Class Tuple中获取值

使用该getValueX()方法从Java的Pair Tuple类中的特定索引处获取值。例如,getValue0()。首先让我们看看使用JavaTuples所需的工具。要在JavaTuples中使用Pair类,您需要导入以下包-import org.javatuples.Pair;注-下载和运行JavaTuples程序的步骤。如果您正…

matlab读取data格式,ReadData3D 各种格式图像的读取,包括医学 效果很好 matlab 272万源代码下载- www.pudn.com...

文件名称: ReadData3D下载 收藏√ [5 4 3 2 1 ]开发工具: matlab文件大小: 51 KB上传时间: 2017-03-29下载次数: 0提 供 者: 李忠宽详细说明:各种格式图像的读取,包括医学图像的读取,效果很好-Various formats of image reading, inclu…

mysql vs2008,vs2008 使用mysql

近期转到研发岗,需要用到mysql、vs2008;之前由于没有做过,写下这篇文章记录下这周所学的东西!先安装好相关软件安装时间比较久耐心等待......安装完毕之后打开vs,Tools -> opptions ->设置完毕之后,点…

matlab pretty什么用,matlab如何使输出结果更美观(symdisp函数——pretty函数升级版)...

EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册x& t7 n0 d: a# m0 O( y- Lmatlab中有些计算结果比较长,直接查看有些困难,下面介绍pretty和symdisp函数优化输出结果,使结果更为直观。- …