当前位置: 首页 > news >正文

网站建设事项重庆发布的最新消息今天

网站建设事项,重庆发布的最新消息今天,北京联通网站备案,适合大网站做安全性测试的工具rust中的超时处理 自从 tokio 1.0发布以来,rust的异步开发总算大势已定。尽管没达到标准库的速度,依然挡不住大家的热情。看编程排行榜,增加2倍的开发者。 既生瑜何生亮,感觉go就是小号的rust。 不废话了。背景:之前…

rust中的超时处理 

自从 tokio 1.0发布以来,rust的异步开发总算大势已定。尽管没达到标准库的速度,依然挡不住大家的热情。看编程排行榜,增加2倍的开发者。

既生瑜何生亮,感觉go就是小号的rust。

不废话了。背景:之前用go开发一个边缘网关的小东东,业余时间做了一大半。后来学了rust,打算练手,用rust重新写。

在crate中央仓库里找来找去,选择了 tokio-modbus。测试中发现用rtu的方式下,如果slave没有发回数据,程序将陷入无限等待中。也没找到如何设置这个超时。串口配置中倒是有个超时设置,不知道有啥用。

在tokio-modbus的github上,找到有人提到这个问题。那个解决问题的方式实在是理解不了,也很啰嗦。

自己动手, 用golang和tokio中都有的 select 很好的解决问题。

核心代码如下

1 tokio::select! {
2     result = &ctx.read_holding_registers(3,12) => match result {
3         Ok(v) => println!("Reading holding {:?}", v),
4         Err(_) => println!("reading err"),
5     },
6     _ = tokio::time::sleep(std::time::Duration::from_millis(100)) => println!("reading timeout 100 ms"),
7 }

完整的测试代码如下

use tokio_modbus::prelude::Reader;
use tokio_serial::SerialPortBuilderExt;#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {let mut port = String::from("");let ports = tokio_serial::available_ports().unwrap();for p in ports {port = String::from("com1");match p.port_type {tokio_serial::SerialPortType::UsbPort(info) => {println!("{}, {:?}", p.port_name, info);port = p.port_name;},_ => println!("{}, unknown type", p.port_name),}}println!("port is {}", port);let slave = tokio_modbus::slave::Slave(0x3);let com = tokio_serial::new(port,9600).timeout(std::time::Duration::from_millis(70)).data_bits(tokio_serial::DataBits::Eight).stop_bits(tokio_serial::StopBits::One).parity(tokio_serial::Parity::None).open_native_async();  // tokio_serial::SerialPortBuilderExt// let com = tokio_serial::SerialStream::open(&builder).unwrap();// only open local serial_portlet ctx = tokio_modbus::prelude::rtu::connect_slave(com.unwrap(), slave).await;let mut ctx = match ctx {Ok(c) => c,Err(e) => { println!("err is {}", e); return Ok(())},};println!("rtu ctx ok, {:?}", ctx);let now = std::time::Instant::now();// let mut timeend = tokio::time::sleep(std::time::Duration::from_millis(100));tokio::select! {result = &ctx.read_holding_registers(3,12) => match result {Ok(v) => println!("Reading holding {:?}", v),Err(_) => println!("reading err"),},_ = tokio::time::sleep(std::time::Duration::from_millis(100)) => println!("reading timeout 100 ms"),}println!("elapsed {} millis", now.elapsed().as_millis());Ok(())
}

复制代码

http://www.yidumall.com/news/63086.html

相关文章:

  • 公司做网站要多长时间审核手机百度app
  • 山东高端网站建设服务商镇江推广公司
  • wordpress 颜色选择器seo优化名词解释
  • wordpress 如何建站最新足球赛事
  • soe标题打开直接显示网站怎么做广告seo是什么意思
  • 手机网站建设服务商app推广渠道有哪些
  • php素材网站源码免费下载效果最好的推广软件
  • 税务软件公司排名优化大师最新版下载
  • 广州网站制作是什么百度销售系统登录
  • 那些网站是java做的排名点击工具
  • 电子商务静态网页模板广西网络优化seo
  • 自学做网站可以吗seo搜索引擎优化推广
  • 大型网站建设需要百度人工服务电话
  • 哪些企业网站使用水墨风格企业查询
  • 做任务游戏能赚钱的网站附近学电脑培训班
  • 浙江中立建设网站跨境电商培训
  • 运动网站开发的需求分析世界球队最新排名
  • 做天猫转让网站郑州网络营销公司
  • wordpress 天气宁波seo公司
  • 网站做微信支付功能win7系统优化工具
  • 如何进行网店推广优化培训课程
  • 做电子元器件的网站seo引擎优化平台培训
  • 动漫设计专升本考哪些关键词优化排名网站
  • 如何做网站渗透测试今日新闻摘抄10条简短
  • 解析域名就可以做网站seo网络科技有限公司
  • 成都哪家做网站公司好百度关键词收费标准
  • 官网网站怎么做制作网页完整步骤代码
  • 微网站建设哪家好有什么推广产品的渠道
  • 南京玄武区建设局网站网络广告人社区官网
  • 建一个自己的网站价格产品推广怎么做