6 小哈龙

尚未进行身份认证

我要认证

一颗勇往直前的心

等级
TA的排名 2k+

高效维持网络长连接:手把手教你实现 自适应的心跳保活机制

前言当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接目录示意图1. 长连接 介绍1.1 简介示意图1.2 作用通过长时间保持双方连接,从而:提高通信速度 确保实时性 避免短时间内重复连接所造成的信道资源 & 网络资源的浪费1.3 长连接 与 短连接的区别示意图2. 长连接断开的原因 从上节可知,在..

2020-10-12 11:28:53

实时操作系统与分时操作系统的区别

1.什么是实时操作系统? 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。其特点是及时响应和高可靠性。实时系统又分为硬实时系统和软实时系统,硬实时系统要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。2.什么是分时操作系统? 使一台计算机同时为几个、几十个...

2020-09-27 11:56:40

duilib加载xml以及资源文件的路径问题

一.问题描述Duilib一般通过加载写好的xml文件显示界面,xml中包含了各种资源图片以及显示属性等,最近使用时遇见两个问题,第一个就是没有设置duilib的主程序句柄,导致加载xml文件时找不到相对路径。第二个问题就是在一个程序中多个界面的xml只能放在同一个文件夹,不能一个xml一个文件夹这种方式二.解决方法问题1解决方法在创建duilib窗口之前,设置主程序句柄,如下代码,在注释1,2,3中分别表示了主程序句柄的设置过程,这一步是必要的,因为代码中继承自duilib的通用窗口类.

2020-09-25 14:54:21

c++程序无法进入断点的原因

今天调试VC程序的时候出现了一个烦人的问题,调用的DLL代码中出现问题,但是打断点一直无法进入断点, 啊啊啊啊啊啊,这问题整了一会还好发现了问题的原因,居然是因为我DLL工程生成的lib程序代码之间调用,断点无法进入程序调用DLL,无法进入DLL源代码中的 断点...

2020-09-25 14:03:27

USB 设备热插拔的检测

系统检测USB 设备往往分为两个过程:1. USB 设备已经插入, 打开软件。 此时需要枚举当前设备列表中所有的设备,并过滤指定的USB 设备。2. 打开软件后, USB 热插拔 。 此时用WM_DEVICECHANGE消息去获取设备信息。 当设备插入或者移除时,系统给当前主窗口发送WM_DEVICECHANGE消息 。 注意: 默认状态, 任何设备都会通知。 所以需要注册指定的通知消息。第一种:枚举系统中所有的USB 设备, 可根据 PID,VID 进一步做判断。vo...

2020-09-18 18:02:37

win32 HINSTANCE与HWND的区别

几个概念的区分HINSTANCE是应用程序实例句柄,HWND是窗口对象句柄,HANDLE是任意对象的句柄,以下是来自CSDN论坛的讨论句柄就是handle,就是一个指针,指向一块不知类型的内存地址,地址处的数据类型决定了句柄类型,好比门牌号,指向程序实例基地址的是实例句柄指向窗口量地址的是窗口句柄,具体使用哪个,要看你要访问什么.微软为这些句柄分别typedef了各自的类型,HINSTANCE,HWNDetc.本质是一样的.不同的对象的获取方式HIN...

2020-09-11 15:13:07

串口之COMMTIMEOUTS结构体

COMMTIMEOUTS主要用于串口超时参数设置。COMMTIMEOUTS结构如下:typedef struct _COMMTIMEOUTS {DWORD ReadIntervalTimeout;DWORD ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutConstant;DWORD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutConstant;} COMMTIMEOUT...

2020-08-31 20:18:23

windows下USB通讯

前言Windows下USB通讯,利用设备VID与PID查询设备,利用了windows的setupapi.lib与hid.lib库,开发时需要包含#include <hidsdi.h>#include <setupapi.h> 头文件USB通讯类CommUsb.h#pragma once#include <windows.h> //一定要加入该头文件#include <iostream>#include <vector&g..

2020-08-21 12:04:33

进程的创建

windows下创建进程CreateProcess函数简介windows下想要创建一个子进程不如linux的fork函数来得方便,通过CreateProcess函数创建一个新的进程,函数的定义如下BOOLCreateProcess( LPCTSTRlpApplicationName,//应用程序名称 LPTSTRlpCommandLine,//命令行字符串 LPSECURITY_ATTRIBUTESlpProcessAttributes,//进程的安全属性...

2020-08-19 15:40:41

孤儿进程与僵尸进程

1、前言  之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念  我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。当一个 进程完成.

2020-08-19 14:56:38

c++多线程中detach的使用隐患

一、其他构造线程的方法c++线程,除了可以利用普通函数创建线程外,还有其他创建线程的方法:类对象 Lambda表达式具体使用方法如下:#include <thread>using namespace std;class TA{public: void operator ()() { printf("%s", "线程开始执行 \n"); }};void main(){ TA ta; // thread 方法会调用TA的拷贝构造函数,所以使用det

2020-08-19 14:23:54

C++11多线程join()和detach()

简介每一个程序至少拥有一个线程,那就是执行main()函数的主线程,而多线程则是出现两个或两个以上的线程并行运行,即主线程和子线程在同一时间段同时运行。而在这个过程中会出现几种情况:主线程先运行结束 子线程先运行结束 主子线程同时结束在一些情况下需要在子线程结束后主线程才能结束,而一些情况则不需要等待,但需注意一点,并不是主线程结束了其他子线程就立即停止,其他子线程会进入后台运行join()join()函数是一个等待线程完成函数,主线程需要等待子线程运行结束了才可以结束#incl

2020-08-19 14:06:25

std::thread

本文转载自:https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Introduction-to-Thread.md本节将详细介绍std::thread的用法。std::thread在<thread>头文件中声明,因此使用std::thread需包含<thread>头文件。<thread>头文件摘要<...

2020-08-19 11:59:36

Visual Assist X 颜色配置习惯

个人使用颜色习惯,

2020-08-19 09:46:48

动态链接库dll,导入库lib,静态链接库lib

一.windows下动态链接库dll,导入库lib,静态链接库lib1.导入库lib与静态链接库lib目前以lib后缀的库有两种,一种为静态链接库(StaticLibary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(ImportLibary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib...

2020-08-15 17:06:27

vs调试时查看指针指向的内存区域的内容

前言记得以前使用vs debug模式下调试时,可以直接看到变量或者指针指向的内存区域的内容,但是今天在查看一个指针指向的内容的时候发现了一个问题,就是当查看一个指针指向的内存区域的内容时,只显示一个字节的内容(问题),后续的看不到,我不清楚这是默认的还是可以设置的,知道的可以说一下怎么设置,对于这样显示很不方便,后来发现一种方法,如下介绍:解决方法其实有两种途径可以实现:途径一1.程序打开debug调试模式==》鼠标点击需要查看的指针变量==》右键==》快速监视(默认快捷键Shif+F9

2020-08-13 21:05:20

再看mfc

前言 很久不用mfc,曾几何时以为以后会很少接触它了,以前总是嫌弃它,老古董,做mfc的没前途。。。最近又用它做东西时,有了不少感悟,mfc是属于界面类库,而且是属于比较成熟,有历史的库,相较于目前做界面比较华丽多彩的duilib、BCG、QT等从外观上略显逊色,但是都了解过之后会有一些想法界面类库实现原理大致类同,类似于同一锅里蒸出的馒头,大小形态不一,本质差别不大,精通于任意一种都会对此领域有较深刻的理解,所以现在我用起mfc没有以前那种偏见了,而且现在使用对它的理解也逐渐准确了许多...

2020-08-07 16:02:15

duilib的通用窗口类WindowImplBase

前言duilib程序中,编写自己的窗口类一般的继承关系有两种,一种是继承自CWindowWnd、INotifyUI、IMessageFilterUI,而第二种方式是继承自duilib封装好的通用窗口类WindowImplBaseWindowImplBase类从源码中可以看到WindowImplBase其实是继承自一般能用到的所有基础类:class DUILIB_API WindowImplBase : public CWindowWnd , public CNotifyPump

2020-08-06 15:37:09

duilib源码修改之WindowImplBase类OnCreate函数

问题:duilib默认新建窗体的左上角为屏幕左上角,无法自己输入参数修改,如下 代码:#include "stdafx.h"#include "MainFrame.h"int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow){ CPaintManagerUI::SetInstance(hInstance); CWndShadow:

2020-08-05 17:53:04

duilib绝对定位与相对定位

前言duilib中窗口,布局,控件等在屏幕上的显示位置都是按照配置好的xml文件规则显示的,每个显示元素的位置大小也需要显式指定,才能呈现出更好看的界面效果,显示元素的位置有两种配置规则,即绝对位置(fuilib中float属性为true时)与相对位置(float属性为false时)。绝对位置(float=true)首先看一张惨不忍睹的自绘图:图中简单描述的是一个屏幕,屏幕里面包含了一个窗口,窗口里面包含了一个显示控件(这个控件可以理解为duilib的各种布局与控件组合),在一般的界面系

2020-08-05 11:55:14

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享精英
    分享精英
    成功上传11个资源即可获取