C++语言
文章平均质量分 91
smartcore
这个作者很懒,什么都没留下…
展开
-
国产福利:C++对象的json序列化扩展
国产福利:基于cJSON的更进一步的C++对象json序列化扩展原创 2024-04-08 17:42:55 · 1556 阅读 · 2 评论 -
libuv套接字绑定失败导致的退出异常
1、问题套按字绑定失败导致的loop退出异常2、环境libuv版本:1.42.0及以下OS版本:win10 x643、现象uv_async_send的回调方法中,使用uv_udp_bind(或者uv_tcp_bind,后文以udp举例),将一个本机不存在的IP,绑定到uv_udp_t(或者uv_tcp_t)代表的handle(new创建),绑定返回失败后,对handle进行释放(delete);在退出loop的过程中,应用发生异常。备注:由于主机IP的人为修改等业务性操作原创 2021-08-18 11:53:32 · 1015 阅读 · 0 评论 -
QT5 “Multicast Receiver Example”组播接收数据的说明
本文基于的QT版本为5.13.0。在更早支持组播的QT版本中,应该也是适用的。在QT提供的“Multicast Receiver Example”示例程序中,udpSocket4这个QUdpSocket对象,是使用下面的方式,进行绑定和加入组播的: udpSocket4.bind(QHostAddress::AnyIPv4, 45454, QUdpSocket::ShareAddress); udpSocket4.joinMulticastGroup(groupAddress4);原创 2020-12-07 21:37:07 · 1250 阅读 · 0 评论 -
linux下UDP组播接收不到数据的说明
背景在一个跨平台的桌面项目中,由于涉及多线程中对象的创建、销毁等,基于QT的对象绑定机制(QObject子类)来做实现时,需要相当心累的设计,才能避免跨线程的异常。由于QT的这个天然机制,在实现很多业务(非界面)模块时,都避免了基于QObject。网络模块中的UDP等功能,同样的也未基于QUdpSocket及其相关,而是包装了libuv(尽管,对桌面来说libuv也需要再折腾,但libuv作者已经明示了这个点了)现象基于libuv的程序示例,在windows下,可以正常工作(接收到组播数据.原创 2020-12-07 13:04:33 · 10417 阅读 · 5 评论 -
std::mutex的使用备忘
在实际测试中,与使用自实现的自旋做同步比较(看上也是自旋),std::mutex在效率上没有大的差异。但是当出现竞争时,std::mutex的lock会完全的等待,此时CPU利用率会很高,当然其等待也是有收益的:效率最高。但是,在一般的应用里,我们能查看任何管理器时,我们总是蜜汁不希望CPU满载(不想让风扇狂转?)降低CPU负载的套路是:使用trylock。不光出让时间片,...原创 2020-03-17 15:24:52 · 333 阅读 · 0 评论 -
spinlock同步能力测试
硬件: 硬件型号:笔记本 处理器:Intel Core i5-4310U CPU @ 2.00GHz(4 CPUs) 内存:16G 硬盘:512固态测试方案:使用以下的代码进行比对测试(10个线程,每个线程加数10;循环10000次)#include <thread>class ThreadPara {private: i...原创 2020-03-12 21:07:34 · 366 阅读 · 0 评论 -
有序线性表指定元素的全部删除
设计一种O(n)级算法从有序线性表中删除与给定的数据项相匹配的所有数据项。假设线性表用数组表示原创 2014-05-01 18:55:31 · 1182 阅读 · 0 评论 -
基于C++标准库的动态绑定设计与实现
简单来说,本文实现了在C++中由类名字符串动态创建对象的功能。设计目的实现C++对象的动态绑定。开发项目时,我们有需要将类名信息放在配置文件中,以在运行时,依据读取的类名信息实现对应对象的创建,从而提高程序功能和配置的灵活性。C++提供了动态绑定特性,但貌似没有提供现成的根据类名进行动态绑定的接口(也多半是我读书太少没发现)。在MFC10中,使用CRuntimeClass以及配套的原创 2014-05-01 18:28:57 · 997 阅读 · 0 评论 -
strstr函数应用时的欠缺及补救
做串口数据接收的时候发现的,才意识的问题的严重性。上半年在单位写了几个检测程序,是通过串口与下位机通信的,因为下位机不停的发数据(有固定的频率和帧格式),上位机在某一时刻如果要接收数据的时候,必须检测接到的数据是否是正确的一帧,我把这种叫作对齐,在对齐的过程中用到了strstr,因为当时的数据并没有出现过接收到的字符串中有空字符包含的情况,因此,通常情况是对的,但是,在做测试的时候,如原创 2009-10-20 20:23:00 · 1131 阅读 · 0 评论 -
C++中位结构的使用注意及#pragma预编译指令的作用
#pragma pack(push, 1)struct pack_bit { unsigned char a : 1; unsigned char b : 1; unsigned char c : 1; unsigned char d : 3; short e : 9;};#pragma pack(pop) //**********上面为代码段1*************** st原创 2009-10-17 15:54:00 · 1023 阅读 · 0 评论