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

做红酒网站深圳住房建设局官方网站

做红酒网站,深圳住房建设局官方网站,58同城个人房屋出租信息发布,佛山seo教程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/64814/

相关文章:

  • 属于您自己的网站建设国药控股cms系统
  • 织梦做的网站首页被篡改施工员证怎么查询网站
  • 展览展示设计必看网站软件开发内容有哪些
  • 用ps做网站切片wordpress怎么删除
  • 网站制作做网站同行做的好的网站
  • 网站建设服务那一个便宜宁波网站建设优化技术
  • 阳泉建设公司网站电子商务网站建设与开发
  • 效果好的网站建设中国顶尖服装设计师
  • 中国的网站为什么要备案wordpress外网访问没模版
  • uc官网网站开发者中心wordpress七牛云储存图片
  • 和男人人做的网站企业建网站有这个必要吗
  • 崔凯 本地wordpress无锡seo网站推广
  • 周浦网络网站建设公司国家建设工程信息网
  • 上哪儿找做网站的客户注册网站名字
  • 网站建站公司排名wordpress 商成
  • 饰品网站模版网页搜索
  • 一级a做爰片免费网站四川省建设厅官方网站联系电话
  • 网站怎么做图片链接html5企业网站 源码
  • 网站开发工程师swot分析杭州网站建设官方蓝韵网络
  • 做网站去除视频广告asp网站采集
  • 网站建设时怎么赚钱的软件开发流程八个步骤模板
  • 水务行业国企门户网站建设网站建设负责传资料不
  • 江苏省工程建设标准网站网站建设一个下载链接
  • 专利查询seo哪家强
  • 建设通网站是什么网站ps做 网站标准尺寸
  • 建网站哪个好 优帮云wordpress添加广告功能
  • 在线制作网站的平台营销型网站建设需要备案吗
  • 部队网站建设设计推广策划
  • 外贸公司网站开发步骤建设网站机构
  • 深圳网站备案注销网络广告的投放技巧