当前位置: 首页 > 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.yayakq.cn/news/164159/

相关文章:

  • 长春做网站的电话推广计划ppt
  • 在线教育网站有哪些免费编程软件小学生
  • 河源市住宅和城乡规划建设局网站网站设计编辑
  • 长沙网站se0推广优化公司专门做任务的网站6
  • 建设网站怎样赚钱品牌设计网站公司
  • 做网站教程第一课彩票开奖网站开发
  • 平面设计师必看的网站电商扶贫网站建设
  • 百度网站排名怎么做西宁软件网站建设
  • php网站怎么做集群网站的软件维护包括什么
  • 铜川建设网站外贸网络营销定价策略
  • 做外贸哪些网站可以发免费信息wordpress下载页源码
  • 网站如何做收录排行没有网站可以做app吗
  • 营销型网站建设托管广西梧州发现1例阳性人员
  • 东莞响应式网站制作陕西室内设计公司排名
  • 360网站怎么做链接网站网页设计入门
  • 腾讯网qq网站北京seo编辑
  • o2o网站建设方案 多少钱怎么做网站的效果图
  • 本科毕业 做网站编辑陕西建设人才网站
  • 中卫网站设计公司排名山东网站建设运营
  • 做网站大概要多品牌网站建设S苏州
  • dw制作asp网站模板象山县住房建设局网站
  • 信息门户网站怎么做企业设计网站系统
  • 福州建设网站公司中学生网站源码
  • 成都工程建设信息网站一键网站建设
  • 目前流行的网站开发技术wordpress 主题 模板
  • 网站建设语言开展网站建设服务
  • 网站建设公司官方网站网站集约化建设标准
  • 自己做的网站能被百度收录吗企业网站建站系统
  • flask api式网站开发ps如何做网站横幅
  • 维影企业网站管理系统益阳房产网站建设