
C++
文章平均质量分 89
lxj434368832
这个作者很懒,什么都没留下…
展开
-
C++11右值引用和std::move语句实例解析
右值引用(及其支持的Move语意和完美转发)是C++0x加入的最重大语言特性之一。从实践角度讲,它能够完美解决C++中长久以来为人所诟病的临时对象效率问题。从语言本身讲,它健全了C++中的引用类型在左值右值方面的缺陷。从库设计者的角度讲,它给库设计者又带来了一把利器。从库使用者的角度讲,不动一兵一卒便可以获得“免费的”效率提升…下面用实例来深入探讨右值引用。1.什么是左值,什么是右值,简单说左值可以赋值,右值不可以赋值。以下面代码为例,“A a=getA();”该语句中a是左值,getA()...转载 2021-06-17 21:08:16 · 330 阅读 · 0 评论 -
C++ 多线程之std::thread浅析
C++ 多线程之std::thread浅析现代操作系统能够呈现给使用者各式各样的形态,跟多线程是离不开的,例如我们在听歌的软件中可以听歌同时也可以搜索其他歌曲。为了支持多线程操作,C++引入了std::thread, 本文来探讨一下多线程的使用和基本原理。1. Native 的多线程如果在windows环境下面,使用多线程开发,那么可以使用CreateThread底层接口来创建线程,例如如下:UINT _stdcall ThreadProc(PVOID param){ in...原创 2021-03-21 11:18:31 · 2006 阅读 · 0 评论 -
值得推荐的C/C++框架和库,包含很多开源项目 (真的很强大)
值得学习的C语言开源项目-1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz210552/webbench.html- 2. Tinyhttpdtinyhttpd是一个超轻量型Http.原创 2020-12-04 17:19:59 · 1197 阅读 · 0 评论 -
原子操作 Interlocked系列函数
常用的Interlocked系列函数:1.增减操作LONG__cdecl InterlockedIncrement(LONGvolatile*Addend);LONG__cdecl InterlockedDecrement(LONGvolatile*Addend);返回变量执行增减操作之后的值。LONG__cdecInterlockedExchangeAdd(LONGvolatile*Addend,LONGValue);返回运算后的值,注意!加个负数就是减。...原创 2020-10-23 17:43:45 · 247 阅读 · 0 评论 -
C++多线程之_beginthread与_beginthreadex
标准C运行时库函数,需要包含头文件process.h。创建线程uintptr_t _beginthread( void (__cdecl *start_address)(void* fun),//线程执行函数,__cdecl unsigned stack_size, //线程的堆栈大小,0,默认大小(1M) void *arglist //线程执行函数的参数);uintptr_t原创 2020-10-23 17:39:23 · 940 阅读 · 0 评论 -
修改Visual Studio 2005 目标程序在Win7下的UAC---去除小盾牌标记
在Win7中,当应用程序试图改变计算机的设置时会弹出UAC通知;更麻烦的是: 当用户用管理员权限安装此程序后,非管理员帐户无法运行此程序,此时只能选择管理员帐户然输入密码后才能运行,这有点像Ubuntu的sudo。msdn 里提供了一种改变应用程序当前运行权限的方法,具体如下:运行VS2005自带的mt.exe工具,向目标应用程序加入manifest资源:<?xml version='1.0' encoding='UTF-8' standalone='yes'?> &l.原创 2020-08-25 16:05:00 · 389 阅读 · 0 评论 -
如何用visual studio进行远程调试
在最近的软件维护过程中,软件在Win10系统下出了一些小问题,但是开发过程却是在XP上VS2005中开发的;需要远程调试。下面记录一下如何远程调试VS2005上的程序。在上述截图的路径中找到x86这个文件夹,然后拷贝到Win10系统下,打开后会出现打开msvsmon.exe(注意打开之前,先关闭掉系统的防火墙),打开后选择工具->选项选择无身份验证(允许任何用户进行调试),点击确定即可,这样的话,在Win10系统下,远程调试的环境就已经搭...原创 2020-08-04 11:05:14 · 575 阅读 · 0 评论 -
Qt_Pro详解
在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:1. 注释 从“#”开始,到这一行结束。2.模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE = appA> app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定转载 2018-03-15 16:02:15 · 219 阅读 · 0 评论 -
一套Windows上C/C++的编码转换函数
在开发文档编辑器经常会遇到各种编码转换的问题要解决,虽然windows api有相关的函数。但是参数多,使用复杂每次都要查手册,很容易出错。所以把常用的转换封装一下,用C的语法实现。支持c/c++注意这些函数都会在堆中创建并返回新的字串,所以返回的字符串在使用完以后要显示销毁使用free(xxx)否则会造成内存泄漏。第一条宏是取消烦人的VS编译器强制要求使用xxx_s函数的宏。如果在非...转载 2018-05-24 10:58:20 · 401 阅读 · 0 评论 -
Xcopy用法
Xcopy 复制文件和目录,包括子目录语法xcopySource [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:MM-DD-YYYY]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a | /m}] [/n] [/o] [/x] [/exclude:FileName1[+[Fi...转载 2018-05-25 17:27:17 · 17759 阅读 · 0 评论 -
c++ windows 获取mac地址
本人是使用了第四种方法,简单,可以查询多个网卡。第一种方法,默认支持WindowsXP, 在win7上使用时会出错,每次查询的Mac地址都是不一样的,都是错的。方法三是最保险的方法,但是需要做烦琐的字符处理和管道通信,不建议在速度要求高的场合使用。其他方法还没有尝试过。本人比较喜欢linux上的开发,在这里晒晒Windows相关的代码,做个保存而已。以下内容,来自http://remove转载 2018-05-05 17:07:18 · 2215 阅读 · 0 评论 -
convert a vc project to a Qt Addin project
Using Visual Studio 2010+ it is now possible to convert a project to a Qt Addin project, using the "Convert project to Qt Add-in project" feature of the Qt Addin.Right click on your project原创 2018-03-14 17:18:23 · 2837 阅读 · 3 评论 -
vs的几种调试方法
进入调试的方法========================================================================================1. F5,项目右键菜单->调试->启用新实例 点击项目右键菜单->属性->配置属性->调试,可以设置调试的相关参数: 1、命令:默认是$(TargetPath),就是启动输出的转载 2018-03-14 14:54:21 · 2387 阅读 · 0 评论 -
nginx stream模块初探
前言nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。这完全就是抢HAproxy份额的节奏,鉴于nginx在7层负载均衡和web service上的成功,和nginx良好的框架,stream模块前景一片光明。stream 模块编译stream模块默认没有编译到nginx, 编译nginx时候 ./configure –wi转载 2018-03-09 17:37:09 · 1693 阅读 · 0 评论 -
Nginx配置文件(nginx.conf)配置详解
Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ;Nginx用户及组:用户 组。window下不指定 worker_processes 8;工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。 error_log logs/error.log; error_log转载 2018-03-09 17:36:04 · 148 阅读 · 0 评论 -
查找Windows内存泄露的工具与技术介绍
如你所知,内存泄露是由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,随后不能重新分配。随着时间推移,会导致系统内存池耗尽(分页或非分页),最终导致服务器中止。 当然,在Windows服务器中止之前,一般有其他内存泄露的症状。主要值得注意的是来自服务器服务(SRV组件)的系统事件日志的入口。尤其是注意: Event ID 2019: The server was unable t...转载 2018-06-29 17:26:57 · 13744 阅读 · 0 评论 -
C++ 使用Json封装数据和解析数据
使用C++和别的语言做交互比较常用的一种数据操作方式就是json。可以到GitHub上下载对应C++的json库源码,我自己下了一套之前的版本,可以正常使用。jsoncpp-src编译出来的库名:json_vc71_libmtd.lib(debug) | json_vc71_libmt.lib(release)需要包含的头文件: jsoncpp-src(对应源码)/include/json (...转载 2018-11-22 17:04:49 · 2037 阅读 · 0 评论 -
SetConsoleCtrlHandler 处理控制台消息
SetConsoleCtrlHandler 处理控制台消息一、如何处理所有的控制台消息。 第一步,首先要安装一个事件钩子,也就是说要建立一个回调函数。调用Win32 API,原型如下:BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, // 回调函数B转载 2017-11-08 18:38:48 · 280 阅读 · 0 评论 -
Qt D指针/私有指针实现
相信不少刚开始阅读Qt源代码的朋友在看到其中的Private类和诸如Q_D、Q_Q等宏时都会思考,为什么Qt要用这样一个设计模式呢?这样一段增加了不少复杂度的代码,到底有多大的好处呢?简单的说,这样的好处在于保证代码的二进制兼容性。什么是二进制兼容性?大名鼎鼎的KDE项目是这样介绍的:一个库是二进制兼容的,如果一个程序和某个库的某个版本动态链接,并且不需要重新编译,即可在安装有该库较新版本的环...翻译 2019-08-09 11:49:44 · 918 阅读 · 7 评论 -
Qwt源码解读之QwtPlotItem类(二)
Qwt框架提供了几种标准的图元实现。如网格(QwtPlotGrid类)、标签(QwtPlotMarker类)、标尺(QwtPlotScaleItem类)、显示SVG格式图形文件的图元(QwtPlotSvgItem类)、频谱图(QwtPlotSpectrogram类)、曲线(QwtPlotCurve类)、柱状图(QwtPlotHistogram类)、间隔区域(QwtPlotIntervalCurve...转载 2019-07-09 17:41:17 · 2278 阅读 · 0 评论 -
VS无法使用编辑并继续 及 警告LNK4075的解决方法
调试项目时一直都可以使用编辑并继续(Edit and continue),这个功能为我节省了大量的调试时间,故耐心地查找了一下原因,花了1个多小时后终于解决了。同时也回过头去解决了当时VS2015法使用的问题。解决方法如下:强调,请在非调试下更改:1、检查是否打开了编辑并继续功能:工具-选项-调试-编辑并继续-启用“编辑并继续”,这里要注意,VS2012和VS2013是默认关闭的,需要我们...转载 2019-06-27 15:34:52 · 4376 阅读 · 0 评论 -
线程池
1.线程池包括四种组件:定时器,等待,I/O, 非I/O 2.异步调用函数:BOOL QueueUserWorkItem(PTHREAD_START_ROUTINE pfnCallback, PVOID pvContext, ULONG dwFlags);该函数将一个工作项目排队放入线程池种的一个线程中并立即返回。所谓工作项目是指pfnCallback函数,它被调用...转载 2019-06-21 16:23:13 · 201 阅读 · 0 评论 -
CreateTimerQueueTimer学习笔记
定时器队列(Timer Queue)可以使用CreateTimerQueue函数创建。定时器队列中的定时器是轻量级对象,可以在一定时间间隔之后调用指定的回调函数(可以只调用一次,也可以是周期性的)。这种等待操作由线程池中某个线程处理的(系统级别)。 向定时器队列中添加定时器可以使用CreateTimerQueueTimer函数。更新一个计时器队列中的计时器可以使用...原创 2019-06-21 16:04:33 · 3110 阅读 · 0 评论 -
Qt QSplashScreen显示动画(gif效果)和消息
Qt自己提供了一个开场动画的类QSplashScreen,可以实现简单的图片开场的效果,但是是静态的图片。Qt播放gif格式图片是利用的QMovie实现的。因此利用QMoviee和QTimer,每隔一段时间将QSplashScreen重绘一次,来实现gif动图的效果。具体使用:CSplashScreen *splashscream = new CSplashScreen(":/inputd...转载 2019-05-13 13:51:19 · 5481 阅读 · 1 评论 -
QPushButton 的默认样式
QPushButton{ background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(214, 214, 214, 255), stop:0.5 rgba(236, 236, 236, 255)); border: 1px solid rgb(124, 124, 124);...原创 2019-04-08 15:50:51 · 3374 阅读 · 0 评论 -
VC C/C++ 4种方法获取文件大小 Windows API
#include #include <windows.h>#include <io.h>#include <sys\stat.h>using namespace std;char *filepath = "C:\\1.txt";//方法一 HANDLE handle = CreateFile(filepath, FILE_READ_EA, F...转载 2019-03-19 11:52:35 · 1259 阅读 · 0 评论 -
visual studio中指定dll存放目录的几种方法
有以下几种方法:(1)选择当前工程,右击"属性" -> "配置属性" -> "调试",在"工作目录"设置dll的路径优点:跨平台(拷贝到其他平台不用改动)缺点:目录不能很干净,因为生成的文件会自动放到这个目录下(2)创建一个文件夹lib,里面放入所有需要的dll文件,右击"属性" -> "生成事件" -> "预先生成事件",输入命令xcopy $(S原创 2018-01-29 13:51:49 · 20029 阅读 · 5 评论 -
批处理中常用命令介绍(Echo、rem、goto、call、pause、if、for)
一、echo命令 (echo图文版)1. Echo :显示当前ECHO的状态:ECHO ON 或者ECHO OFF 。2. ECHO ON :ECHO状态设为ON,将显示命令行(如每行前的C:\>等类似标志)。3. ECHO OFF:CHO状态设为OFF,将不显示命令行(如每行前的C:\>等类似标志) 。4. ECHO 字符串 :将输入的字符串显示在CMD屏幕上。5. EC转载 2018-01-29 16:05:19 · 456 阅读 · 0 评论 -
dump文件定位程序崩溃代码行
1.dump文件2.程序对应的pdb步骤一:安装windbg步骤二:通过windbg打开crash dump文件步骤三:设置pdb文件路径,即符号表路径步骤四:运行命令!analyze -v,这是windbg提供的一个自动分析命令,正常情况下,会显示出导致崩溃的行为,其所在文件,以及其在文件中的具体行数0:254> !analyze -v..转载 2018-02-04 22:12:11 · 1515 阅读 · 0 评论 -
CreateThread与_beginthreadex本质区别
原文地址:http://blog.youkuaiyun.com/morewindows/article/details/7421759本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底转载 2017-11-10 15:19:49 · 158 阅读 · 0 评论 -
网络字节顺序NBO(Network Byte Order)和主机字节顺序(HBO,Host Byte Order)转换
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数。网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long" ntohl()--"Network to Host Long" hto原创 2017-11-10 15:04:27 · 3033 阅读 · 0 评论 -
C++11 std::chrono库详解
C++11 std::chrono库详解 所谓的详解只不过是参考www.cplusplus.com的说明整理了一下,因为没发现别人有详细讲解。 chrono是一个time library, 源于boost,现在已经是C++标准。话说今年似乎又要出新标准了,好期待啊! 要使用chrono库,需要#include,其所有实现均在std::chrono转载 2017-11-09 11:18:29 · 638 阅读 · 0 评论 -
c++11-bind的用法
bind函数在c++11之前,要绑定某个函数、函数对象或者成员函数的不同参数值需要用到不同的转换器,如bind1st、bind2nd、fun_ptr、mem_fun和mem_fun_ref等.在c++11中,绑定参数的方法得以简化.c++11提供了"一站式"绑定模板bind,其用法为:#include std::bind(待绑定的函数对象/函数指针/成员函数指针,参数绑定值1,参转载 2017-11-08 18:40:18 · 335 阅读 · 0 评论 -
IOCP模型
IOCP模型IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的Windows API,它可以高效地将I/O事件通知给应用程序,类似于Linux中的Epoll。简介IOCP模型属于一种通讯模型,适用于Windows平台下高负载服务器的一个技术。在处理大量用户并发请求时,如果采用一个用户一个线程的方式那将造成CPU在这转载 2017-11-08 18:39:52 · 671 阅读 · 0 评论 -
IOCP模型与网络编程
IOCP模型与网络编程一。前言: 在老师分配任务(“尝试利用IOCP模型写出服务端和客户端的代码”)给我时,脑子一片空白,并不知道什么是IOCP模型,会不会是像软件设计模式里面的工厂模式,装饰模式之类的那些呢?嘿嘿,不过好像是一个挺好玩的东西,挺好奇是什么东西来的,又是一个新知识啦~于是,开始去寻找一大堆的资料,为这个了解做准备,只是呢,有时还是想去找一本书去系统地学习一转载 2017-11-07 14:23:21 · 212 阅读 · 0 评论 -
线程同步几种方式
进程中线程同步的四种常用方式: 1、 临界区(CCriticalSection) 当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。具体应用方式: 1、 定义临界区对象CcriticalSection g_CriticalSection; 2、 在访问共享资源(代码或变量转载 2017-05-08 17:14:33 · 527 阅读 · 0 评论 -
正则表达式入门教程
本文目标30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。如何使用本教程最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :)别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有想像中的那么困难。当然,如果你看完了这篇教程之后,发现自己明白转载 2017-04-19 15:20:17 · 563 阅读 · 0 评论 -
C++实现鼠标控制 封装常见的模拟鼠标、键盘的操作函数
API 或 MFC 视窗程序 里 有 函数,例如 API 函数 设位置:BOOL SetCursorPos( int x, int y); 参数是屏幕坐标x,y头文件 Winuser.h链接库 #pragma comment (lib, "User32.lib")或取位置 GetCursorPos(&p);显示鼠标 int ShowCursor( BOOL bSho原创 2017-03-08 16:46:14 · 31742 阅读 · 4 评论 -
QT5 获取mac地址和cpu序列号
#include #include #include #include #include #ifdef __GNUC__#include #elif defined(_MSC_VER)#if _MSC_VER >= 1400#include #endif#else#error Only supports MSVC or GCC#endifQS转载 2017-02-23 15:13:06 · 6933 阅读 · 0 评论 -
QMap和std::map的遍历
两种遍历方式都使用迭代器:1QMap使用Iterator.key(),和Iterator.value()方法获取第一个或第二个元素的值。而std::map使用Iterator->first(), Iterator->second()来获取第一个或第二个元素的值。QMap<QString,QString> m_RatioCfg; QMap<...原创 2017-01-19 14:24:44 · 18974 阅读 · 4 评论