std::tuple(元组)介绍与使用

C++11引入了一个新的较实用的模板类型,std::tuple,也即是元组。元组是一个固定大小的不同类型(异质,heterogeneous)值的集合,也即它可以同时存放不同类型的数据。C++已有的std::pair类型类似于一个二元组,可看作是std::tuple的一个特例,std::tuple也可看作是std::pair的泛化。std::pair的长度限制为2,而std::tuple的元素个数为0~任意个。阅读全文→


范文泉 发布于 2024-06-14 11:42

串口通讯超时的设置与含义

COMMTIMEOUTS:COMMTIMEOUTS主要用于串口超时参数设置。COMMTIMEOUTS结构如下:

typedef struct _COMMTIMEOUTS { 
DWORD ReadIntervalTimeout; 
DWORD ReadTotalTimeoutMultiplier; 
DWORD ReadTotalTimeoutConstant; 
DWORD WriteTotalTimeoutMultiplier; 
DWORD WriteTotalTimeoutConstant; 
} COMMTIMEOUTS,*LPCOMMTIMEOUTS; 

间隔超时=ReadIntervalTimeout
总超时 = ReadTotalTimeoutMultiplier * 字节数 + ReadTotalTimeoutConstant

串口读取事件分为两个阶段(我以Win32 API函数ReadFile读取串口过程来说明一下)
第一个阶段是:串口执行到ReadFile()函数时,串口还没有开始传输数据,所以串口缓冲区的第一个字节是没有装数据的,这时候总超时起作用,如果在总超时时间内没有进行串口数据的传输,ReadFile()函数就返回,当然 没有读取到任何数据。而且,间隔超时并没有起作用。
第二阶段:假设总超时为20秒,程序运行到ReadFile(),总超时开始从0 计时,如果在计时到达10秒时,串口开始了数据的传输,那么从接收的第一个字节开始,间隔超时就开始计时,假如间隔超时为1ms,那么在读取完第一个字节后,串口开始等待1ms,如果1ms之内接收到了第二个字节,就读取第二个字节,间隔超时重置为0并计时,等待第三个字节的到来,如果第三个字节到来的时间超过了1ms,那么ReadFile()函数立即返回,这时候总超时计时是没到20秒的。如果在20秒总计时时间结束之前,所有的数据都遵守数据间隔为1ms的约定并陆陆续续的到达串口缓冲区,那么就成功进行了一次串口传输和读取;如果20秒总计时时间到,串口还陆陆续续的有数据到达,即使遵守字节间隔为1ms的约定,ReadFile()函数也会立即返回,这时候总超时就起作用了。
总结起来,总超时在两种情况下起作用
第一:串口没进行数据传输,等待总超时时间那么长ReadFile()才返回。非正常数据传输
第二:数据太长,总超时设置太短,数据还没读取完就返回了。读取的数据是不全的
间隔超时触发是有条件的
第一:在总超时时间内。
第二:串口进行了数据的传输。
成功的进行一次串口数据的传输和读取,只有总超时和间隔超时相互参与配合才能完成


范文泉 发布于 2024-05-22 09:55

范文泉 发布于 2023-12-09 01:31

BuildAdmin源码阅读体会记录(一)

BuildAdmin源码阅读体会记录阅读全文→


范文泉 发布于 2023-11-26 01:48

VUE 学习笔记

[该文章已加密,请点击标题输入密码访问]


范文泉 发布于 2023-11-22 01:11

Mock.js 详细使用教程

mock.js:是一款模拟数据生成器,可以生成随机数据,拦截Ajax请求阅读全文→


范文泉 发布于 2023-11-21 11:06

瀑布式开发与敏捷开发

瀑布式开发与敏捷开发的区别是:瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求、分析、设计、编码、测试的步骤顺序进行。而敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发,二者开发方式不同。这就是瀑布式开发与敏捷开发的区别。阅读全文→


范文泉 发布于 2023-10-09 23:23

Duilib添加图片阴影及效果

Duilib添加图片阴影及效果阅读全文→


范文泉 发布于 2023-09-21 16:35

DuiLib创建表格时显示数据时异常退出

DuiLib创建表格时显示数据时异常退出阅读全文→


范文泉 发布于 2023-09-06 19:06

弹出加载框后调用线程函数访问数据库,软件异常退出

因业务需要在点击搜索后弹出对话框显示正在查询中,然后在这个对话框里创建线程来进行数据库的查询。然后软件异常退出。阅读全文→

标签: C++异常 COM

范文泉 发布于 2023-09-06 18:56

DUILIB切换窗口再切换回无焦点事件问题

问题1:切换窗口后,再切换回来,文本框里的焦点丢失了
问题2:窗口初始化设置了焦点控件,但是切换了窗口后,返回没有了。阅读全文→


范文泉 发布于 2023-08-25 14:28

C语言 static变量及其作用

static可修饰全局函数,类函数,类变量,全局变量,局部变量。阅读全文→


范文泉 发布于 2023-07-31 19:13

Duilib模块化的实现

通过这个代码可以实现DUILIB消息处理模块化,但是存在一个问题,就是窗体所有消息都经过模块类里。目前我暂时想了一个办法,我定义一个基类的模块实现类,伪代码如下阅读全文→


范文泉 发布于 2023-07-18 23:57

C++子类对象调用父类函数

C++子类对象调用父类函数阅读全文→


范文泉 发布于 2023-07-05 17:10

产品版本号命名规范和更新规则

产品版本号命名规范和更新规则阅读全文→


范文泉 发布于 2023-06-25 09:50

VS配置选项MT和MD的说细说明

其实绝大多数软件都是采用多线程MD方式编译,例如QQ迅雷等等,如果找到他们目录很容易发现上面提到的运行时库。因为这样一来编译出来的文件小,所有运行时库统一,同时也让内存管理简单化,省去了跨模块内存访问带来的各种bug。 阅读全文→


范文泉 发布于 2023-06-21 09:46

VC使用双缓冲绘图仍然闪烁的问题分析

使用内存DC绘图,然后实现双缓冲,避免绘图闪烁,这个小技术简单但很有效。但是仍然有很多人说使用了双缓冲,图片却仍然有闪烁,分析了几个这样的例子,发现其实不是双缓冲的技术问题,而是使用者没有正确理解和使用双缓冲的方法。使阅读全文→


范文泉 发布于 2023-05-27 23:50

BasicExcel操作Excel实例

BasicExcel 是一个非常简单的操作Excel的库,使用C++编写,虽然功能有限,但基本的读写单元格、工作簿、生成新的excel文件的功能还是具备,他最大的亮点就是不需要第三方依赖,整个库就两个文件阅读全文→


范文泉 发布于 2023-05-27 23:36

Win32 API串口编程详细说明

Win32 API串口编程:调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。阅读全文→


范文泉 发布于 2023-05-17 23:10

用父类指针释放子类对象,不能调用子类析构函数 解决方法

父类引用指向子类对象时,用父类指针释放子类对象,将不能调用子类析构函数阅读全文→


范文泉 发布于 2023-05-12 10:21