1  简介 

Asio 是一个跨平台的 C++ 库,常用于网络编程、底层的 I/O 编程等 (low-level I/O),其结构框架如下:

2  使用 Asio

2.1  下载 

Asio 可分为 Boost 版和 non-Boost 版,后者的下载地址为: http://think-async.com/

下载完成后,直接解压到合适位置即可。

2.2  配置

1) 使用 Qt 5.9.1,其 .pro 工程文件中,添加如下配置:注意 ASIO_STANDALONE 在 non-Boost 版本中必须带有

/include

DEFINES += ASIO_STANDALONE

2)使用 VS 2015,则 ASIO_STANDALONE  配置如下所示:

2.3  代码示例

下面是一个简单的串口通讯例子,主要步骤为: 创建串口 --> 配置参数 --> 读写数据 --> 开启事件循环

#include <functional>
#include "asio.hpp"

#include <QDebug>

using namespace asio;

// 存储接收到的数据
];

// 声明回调函数
void PrintBuf();

int main()
{
    // 串口 COM1
    io_service iosev;
    serial_port port(iosev, "COM1");

    // 参数设置:波特率、流控、奇偶校验、停止位、数据位
    port.set_option(serial_port::baud_rate());
    port.set_option(serial_port::flow_control(serial_port::flow_control::none));
    port.set_option(serial_port::parity(serial_port::parity::none));
    port.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
    port.set_option(serial_port::character_size());

    // 向串口写数据
    write(port, buffer());

    // 从串口读数据(异步)
    port.async_read_some(buffer(kBuf),std::bind(PrintBuf));

    // 开启事件循环
    iosev.run();
}

// 打印接收的数据
void PrintBuf()
{
    qDebug() << kBuf;
}

3  DB9 串口

当运行上面程序时,会发现个问题:程序先向串口 COM1, 发送 / 写入 了 "Hello Asio” 的数据,然后又去 收取 / 读出 数据,这对于一个串口而言,是不会收到数据的。

DB9 串口引脚的编号如下:

其中,2 --> RxD,是接收数据的管脚;3 --> TxD,是发送数据的管脚。

为了上面的程序能够成功运行,可以在运行程序之前,将 2脚 和 3脚 短接,这样,则既可以发送数据,也可以收取数据了

4  虚拟串口

如果使用笔记本的话,一般没有串口,这时有两种方案:

一是,使用 USB 转串口数据线,并安装相应的驱动,便可以和带串口的设备进行通信了;

二是,使用虚拟串口软件,创建虚拟串口,例如,Configure Virtual Serial Port Driver

C++ 之 Asio 库的更多相关文章

  1. VS2008下编译BOOST 1.39的ASIO库

    由于全部编译BOOST库需要的时间太长,而且耗费空间,况且我只需要用ASIO库,所以就没有必要全部编译了. boost库到www.boost.org上下载. 编译很简单,假设你的boost存放的目录是 ...

  2. c++ boost asio库初学习

    前些日子研究了一个c++的一个socket库,留下范例代码给以后自己参考. 同步server: // asio_server.cpp : コンソール アプリケーションのエントリ ポイントを定義します. ...

  3. Mac OS 使用asio库

    下载地址:http://sourceforge.net/projects/asio/files/asio/1.12.2%20%28Stable%29/ 本人下载的版本:asio-1.12.2 1,本人 ...

  4. Mac OS 安装 独立的asio库

    先安装boost,见前文,然后上官网下载不带boost的asio,版本为:asio-1.12.2 cd到下载的库目录,配置 ./configure --with-boost="boost的安 ...

  5. ASIO库使用注意事项

    1. 使用 io_service::work 实现 io_service 无任务时不退出 正常情况下向io_service抛任务,它执行完成后就会自动退出,而要实现那种chromium那种的循环队列, ...

  6. [Boost基础]并发编程——asio网络库——同步socket处理

    网络通信简述 asio库支持TCP,UDP和ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好的封装了原始的Berkeley Socket API, ...

  7. [Boost基础]并发编程——asio网络库——定时器deadline_timer

    asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求使用多线程和锁定,有些的避免了多线程编程带来的诸多有害副作用(如条件竞争 ...

  8. 网络库Asio交叉编译(Linux生成ARM)

    1.  Asio是一个跨平台的C++库,用于网络和底层I/O编程.Asio使用先进的C++方式提供了一系列的异步模型 2. 官方网址:http://think-async.com 3. 由于Asio库 ...

  9. BOOST.Asio——Overview

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  啥说的,鄙视那些无视版权随 ...

随机推荐

  1. 单例模式与静态变量在PHP中

    在PHP中,没有普遍意义上的静态变量.与Java.C++不同,PHP中的静态变量的存活周期仅仅是每次PHP的会话周期,所以注定了不会有Java或者C++那种静态变量. 1. 静态变量在PHP中 在PH ...

  2. php中的四种排序算法

    . 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将 ...

  3. 设备像素比dpr介绍

    首先介绍一下概念 devicePixelRatio其实指的是window.devicePixelRatio window.devicePixelRatio是设备上物理像素和设备独立像素(device- ...

  4. SQL数据库操作(CURD)

    对数据仓库的操作(CURD): 新增:  create database db_test; 新增的时候设置编码: create database da_test_1 character set utf ...

  5. (转载)MQ基本操作

    摘自:http://blog.sina.com.cn/s/blog_4892cf780100erga.html 一.MQ基本操作 MQ中有几个很重要的组件:队列管理器(QueueManager).队列 ...

  6. 这个类复制文本文件FileCopy

    package JBJADV003; import java.io.File;import java.io.BufferedReader;import java.io.BufferedWriter;i ...

  7. SpringEL 表达式错误记录

    原因暂时未知....

  8. Frameset框架集的应用

    Frameset框架集常用于写网站后台页面,大多数"T字型"布局后台页面,就是应用Frameset框架集来做的.Franeset框架集的优点是,他可以在同浏览器窗口显示不同页面内容 ...

  9. OpenStack(企业私有云)万里长征第五步——虚拟机Migrate&Resize

    一.前言 上一篇文章讲了OpenStack的部署和简单操作,今天介绍一下如何实现虚拟机的Migrate以及Resize.Migrate操作和Resize操作基本上属于同一种操作,Migrate操作只是 ...

  10. smarty模板基本语法

    smarty基本语法: 1.注释:<{* this is a comment *}>,注意左右分隔符的写法,要和自己定义的一致. <{* I am a Smarty comment, ...