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

建设邮箱网站wordpress个人博客源码

建设邮箱网站,wordpress个人博客源码,免费营销型wordpress模板下载,微博推广方法有哪些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/19862/

相关文章:

  • 成都装修网站建设个人网站备案需要盖章吗
  • 网站 数据库 sql 导入百度站长工具平台
  • 吉安企业做网站郑州市惠济区建设局网站
  • 长春火车站属于哪个区做婚恋网站的翻译好吗
  • 建筑网站翻译编辑毕业设计做网站 答辩会问什么问题
  • 揭阳网站设计免费注册的网站
  • 校园在线网站怎么做做网站和视频剪辑用曲面屏
  • 网站维护费大概多少wordpress装机主题
  • 兰溪高端网站建设公司网站建设基本步骤是什么
  • 南宁定制网站制作价格东莞网页制作报价
  • 正能量软件不良网站免费入口cad培训班一般学多久
  • 注册自己的网站怎么注沈阳网站备案照相
  • 环评怎么在网站做公示绿色企业网站
  • 产品设计网站官网个人做网站下载网上图可以吗
  • 金湖网站建设公司网站开发进度源码
  • 公司购买网站建设费用会计分录网络营销课程培训课程
  • 织梦网站文章发布信息模板下载wordpress拓展业务
  • 拖拽式可视化编辑网站哪个网站可以做教师招聘题目
  • 如何提高网站的权重商城网站备案需要什么
  • 首京建设投资引导基金网站如何在网站上做qq群链接
  • 百度怎么做网站域名昆明网站建设询力鼎科技
  • 邢台123式的网站怎么做wordpress 文章之显示标题
  • 网站年费给人做网站网站犯法嘛
  • 如何做网络推广网站后台网站更新 网站没显示
  • django做的网站举例制作外贸网站
  • html 学习网站搜索引擎网址
  • 网站开发 0755电商网站 cms
  • 电子商务网站开发技术和工具有哪些简述网站的创建流程
  • 六站合一的优势域名网址
  • 手机网站开通微信支付重庆网站推广招聘