![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 54
西飘客
这个作者很懒,什么都没留下…
展开
-
单线程读 单线程写一个变量是否一定要加锁
不存在对a读一半或写一半的问题。可能又有新的疑问,这样且不是说对a的操作是原子了,那样的话何必还需要原子变量的类型了,而且对a的操作也不是一条指令能完成的啊。保证了原子性后还有一个可见性问题,写线程改变了变量的值读线程不一定能够立马读到改变后的值,但是如果我们可以接受这种延时读取完全可以不做任何额外的处理(比如我们一个值表示当前的池子中的水位,我们写线程加水后把表示水位的值改变为新的状态我们读线程取水,这次取不到可以下次取),当然这个问题也可以通过voliate关键字来解决,最暴力的手段当然还是加锁。转载 2024-06-26 18:01:16 · 11 阅读 · 0 评论 -
C++ 内存池介绍与经典内存池的实现
内存池(Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请内存,这样做的缺点在于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。转载 2024-05-08 10:32:01 · 81 阅读 · 0 评论 -
c++多线程编程中的原子操作InterlockedIncrement和InterlockedDecrement用法详解
在这个修改后的示例中,通过使用InterlockedIncrement和InterlockedDecrement函数,将计数器的递增和递减操作改为原子操作,确保了对共享变量的安全访问,避免了竞态条件和数据竞争的发生。在上面的示例中,多个线程同时对计数器进行递增和递减操作,由于counter++和counter--不是原子操作,可能会导致竞态条件和数据竞争的发生,从而导致计数器的最终值不确定。在多线程编程中,除了原子操作外,还需要考虑其他同步机制,如互斥锁、条件变量等,以确保程序的正确性和性能。转载 2024-05-07 16:08:52 · 44 阅读 · 0 评论 -
原子操作InterlockedExchange系列
操作,则ThreadA它就可以退出while循环,然后获取资源,并且,它对g_fResourceInUse设置为TURE,其它线程(假使ThreadC)如要使用,则将如刚才ThreadA般等待。可以用InterlockedExChange来实现循环锁的功能,所谓循环锁,就是在线程1中如果要对变量进行操作,要先查看这个变量(或资源)有没有被其它线程用到,如果是,则一直循环,则到其它线程放弃对该变量(或资源)的控制。不用其他互斥量,只为提升效率)//Access the resource. //获取资源。转载 2024-05-07 10:14:42 · 25 阅读 · 0 评论 -
VC++线程池1
在一般的设计中,当需要一个线程时,就创建一个,但是当线程过多时可能会影响系统的整体效率,这个性能的下降主要体现在:当线程过多时在线程间来回切换需要花费时间,而频繁的创建和销毁线程也需要花费额外的机器指令,同时在某些时候极少数线程可能就可以处理大量,比如http服务器可能只需要几个线程就可以处理用户发出的http请求,毕竟相对于用户需要长时间来阅读网页来说,CPU只是找到对应位置的页面返回即可。之后当指定的时间片到达,就会将对应的回调历程放入到队列中,一旦线程池中有空闲的线程就执行它。转载 2024-04-30 17:19:54 · 20 阅读 · 0 评论 -
C中kbhit()和getch()
【代码】C中kbhit()和getch()转载 2024-04-29 14:39:36 · 73 阅读 · 0 评论 -
C/C++使用Windows的API实现共享内存以及同步
C/C++使用Windows的API实现共享内存以及同步。转载 2023-01-13 10:38:03 · 574 阅读 · 0 评论 -
tigervnc 编译
tigervnc 编译转载 2022-09-22 18:10:12 · 509 阅读 · 0 评论 -
C++ deque容器
c++ deque转载 2022-07-08 18:33:14 · 263 阅读 · 0 评论 -
C++ std::stack的使用
c++ stack原创 2022-07-08 17:23:13 · 459 阅读 · 0 评论 -
C++ 队列queue的使用
c++ 队列queue转载 2022-07-08 17:16:26 · 1851 阅读 · 0 评论 -
jsoncpp 空数组
jsoncpp 空数组转载 2022-07-05 11:38:37 · 450 阅读 · 0 评论 -
windows服务获取登录用户名
windows服务 用户名原创 2022-07-04 15:14:29 · 997 阅读 · 0 评论 -
C语言缓冲区基础知识
c 缓冲区转载 2022-07-01 13:49:33 · 3124 阅读 · 0 评论 -
编译生成*.exe的时候 为什么会生成*.lib/*.exp
编译生成*.exe的同时生成*.lib/*.exp,项目里有导出的东西。原因:查找项目中使用的函数是否具有__declspec(dllexport)语句解决方法:自然是去掉_declspec(dllexport)void _declspec(dllexport) test(); => extern "C" void test();...转载 2022-06-14 16:42:03 · 727 阅读 · 0 评论 -
C++ 日志库EasyLogging++
c++ easylogging++原创 2022-06-07 19:00:12 · 467 阅读 · 0 评论 -
C++ jsoncpp中文乱码问题
c++ jsoncpp 解决中文乱码转载 2022-06-01 16:58:04 · 1350 阅读 · 0 评论 -
C++ CxImage库下载_编译_图片截取_压缩_调整大小_格式转换
CxImage转载 2022-06-01 13:59:33 · 1262 阅读 · 1 评论 -
VS 为VC++添加UAC控制(VC程序默认管理员运行)
工程右键属性 具体如图:确定后编译链接 生成的程序就有了一个盾牌图标了,也就是具有管理员权限了我们知道, win7及以上的系统权限控制的非常严格,普通用户在系统目录下或者注册表中没有读写的权限,软件的功能好多功能无法操作,这时候就需要设置管理员权限。...原创 2022-05-30 17:25:31 · 655 阅读 · 0 评论 -
C++ 控制台程序隐藏方法
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )在程序中加上如上语句,可以隐藏控制台窗口。完整代码:#include<windows.h>#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址int main(){ MessageBox(NULL..转载 2022-05-30 16:44:23 · 4332 阅读 · 4 评论 -
Visual Studio版本号对应表
从一个外行角度看,VC/VS有3种版本号,具备一定的迷惑性:(xx表示具体的数字)MSVC++ xx(VC版本 eg. VC6.0)_MSC_VER xxVisualStudio xx(VS版本 eg. VS2012)对照关系整理如下(更新至2022.3.26):refs:MSVC_TOOLSET_VERSION — CMake 3.23.0 Documentation Predefined macros | Microsoft Docs...转载 2022-05-26 09:16:18 · 657 阅读 · 0 评论 -
C++ Dlib库介绍和编译使用
Dlib介绍Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具。它广泛应用于工业界和学术界,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。Dlib的开源许可证允许您在任何应用程序中免费使用它。Dlib有很长的时间,包含很多模块,近几年作者主要关注在机器学习、深度学习、图像处理等模块的开发。主要特点文档丰富 与许多开源项目不同的是,Dlib为每个类和功能提供了完整和精确的文档。同时它还有调试模式,可以帮助你检查使用某个函数.转载 2022-05-25 17:34:42 · 2564 阅读 · 0 评论 -
VC 获取系统特殊文件夹的路径如:系统目录,桌面等
如果需要,请在StdAfx.h中添加 #include <shlobj.h>TCHAR MyDir[_MAX_PATH];SHGetSpecialFolderPath(this->GetSafeHwnd(),MyDir,CSIDL_APPDATA,0);AfxMessageBox(MyDir);其中第三个参数CSIDL_APPDATA可以为以下的值:CSIDL_BITBUCKET回收站CSIDL_CONTROLS控制面...转载 2022-05-18 10:04:16 · 703 阅读 · 0 评论 -
windows vs2017 编译测试libzip
1 下载libzip-1.8.0zlib-1.2.11解压到H:\devel(自定义)2 打开工具打开vs 2017的开发人员命令提示符3 编译zlibcd cd devel\zlib-1.2.11mkdir buildcd buildcmake .. -G"Visual Studio 15 2017 Win64" -DCMAKE_INSTALL_PREFIX="h:\include\zlib-vs17"msbuild /P:Configuration=Release原创 2022-05-16 17:10:16 · 468 阅读 · 0 评论 -
C++ 配置使用libcurl
首先可以从github上下载githubhttps://github.com/curl/curl也可以从curl网站上下载curl网站上下载https://curl.se/download.html我以从github上下载为例,解压后得到curl-master目录,进入curl-master/projects目录中, 先双击执行generate.bat文件,他会生成各个版本的vs项目。(否则第3步有可能没有libcurl.vcxproj文件) 进入curl-master/projects/Windo转载 2022-05-16 13:56:11 · 988 阅读 · 0 评论 -
预定义常量WIN32、_WIN32、_WIN64的作用
MSDN 里说,VC有3个预处理常量,分别是_WIN32,_WIN64,WIN32。这三个常量如何使用呢?看起来简单,其实是很困惑的。WIN32在 Win32 配置下,WIN32在“项目属性-C/C+±预处理器-预处理器定义”里声明了,而在 x64 配置下,这个常量并不在项目预定义列表中。这是否说明可以根据 WIN32 来判断是否在 x64 平台呢?不。在 Windows SDK的minwindef.h下第37行有如下定义:#ifndef WIN32 #define WIN32#e.转载 2022-05-10 09:24:45 · 2860 阅读 · 1 评论 -
c++ jsoncpp的下载、编译
1、下载地址:https://github.com/open-source-parsers/jsoncpp2、使用:最简单的一种使用方式,使用.h和.cpp文件和你的项目一起编译怎么获取.h和.cpp呢?看以下操作打开你下载的jsoncpp文件夹双击运行amalgamate.py文件(需要有python环境)操作后,会生成一个dist的文件夹里面就是我们需要的jsoncpp的源代码了,只有三个文件可以直接包含到项目中一起编译这个源文件还是跨平台的,在windows下和linux下都转载 2022-05-07 14:17:28 · 2381 阅读 · 0 评论 -
常用websocket开源库
websocket是html5中新增的协议,websocket的特点是全双工,服务端和客户端可以互相发送消息。得益于不同平台对websocket协议的广泛实现,它为跨多种平台的实时网络应用程序开发提供了极大的方便。除了可以在前端开发的JavaScript 中使用 WebSocket 之外,我们也可以在 Java、C++、Go、Rust 等编程语言平台中使用 WebSocket。我汇总整理了8款目前常用的websocket开源框架,都是比较优秀的websocket库,大家可以来了解一下。1、GoEas转载 2022-05-07 09:37:34 · 5863 阅读 · 0 评论 -
MFC 获取全路径中的文件名
CString aaa = "C:/test\\aaa\\bbb.txt"; aaa.Replace("\\", "/"); CString fileName = aaa.Right(aaa.GetLength()-aaa.ReverseFind('/')-1); //获取到bbb.txt CString firstFileName = fileName.Left(fileName.Find('.')); //去除后缀获取到bbb...原创 2021-08-11 11:39:41 · 1175 阅读 · 0 评论 -
LINK : error LNK2001 无法解析的外部符号 __DllMainCRTStartup@12
当创建DLL项目时,尤其是一些资源转化成dll时,其不要dllmain()时,会出现:error LNK2001: 无法解析的外部符号 _DllMainCRTStartup@12 错误。解决办法:右击,项目属性-->连接器-->高级-->无入口点:改成 是。/NOENTRY 选项是创建纯资源DLL所必需的。使用此选项可防止LINK将对_main的引用链接到DLL。...原创 2020-08-21 12:10:20 · 2862 阅读 · 0 评论 -
error C2440 “static_cast” 无法从“void (__thiscall C* )(void)...
1、VC6中,说可以把函数在头文件中定义为:afx_msg void OnProgress()这样 但是在VS2005及以上,要求很严格,必须函数返回值为LRESULT类型,所以在VS2005及以上,需要修改为LRESULT afx_msg OnProgress(WPARAM, LPARAM);其中,后面两个参数不管用不用得上,都要写。2、添加消息映射没差别3、自己写的函数原型如下:LRESULT CMainFrame::OnProgress(WPARAM wParam,LPARAM原创 2020-07-24 11:38:05 · 315 阅读 · 0 评论 -
C++ 使用ReadDirectoryChangesW监测文件夹
直接上代码:FileSystemWatcher.h#ifndef __FILESYSTEMWATCHER_HPP__#define __FILESYSTEMWATCHER_HPP__#if(_WIN32_WINNT < 0x0400)#define _WIN32_WINNT 0x0400#endif#include <windows.h>class FileSystemWatcher{public: enum Filter { FILTER_FILE_原创 2020-07-09 18:33:37 · 1459 阅读 · 0 评论 -
VS2013报错:Failed to register output. Please try enabling Per-user Redirection or register the compone
解决办法有四种:第一种:Solution Explorer ->项目节点->鼠标右键->Properties->Linker ->General->Pre-user Redirection 设为TRUE 就好了。对应的中文版是:Solution Explorer ->项目节点->鼠标右键->属性->链接器->常规->逐用户重定向第二种:提升程序的运行权限,使用管理员权限运行第三种:关闭重定向,工程-->Propert原创 2020-06-23 17:30:18 · 703 阅读 · 0 评论 -
CHttpFile SendRequest调用GetLastError 返回2(系统找不到指定文件)
解决方法:打开internet explorer, 选择“文件”下拉菜单(没看到的话,按ALT键可以显示菜单栏),然后取消选中“脱机工作”,返回“联机”工作。之后,使用wininet的相关编程将正常工作;SendRequest的返回将正常。...原创 2020-06-15 17:38:20 · 439 阅读 · 0 评论 -
C++ 十六进制字符串和字符数组相互转换
字符串转byte数组,就是实现如下功能:把一个字符串,比如“E4F1C3A81F”每两位作为一个十六进制数存到一个unsigned char 型的数组(buf)里,buf[0] = 0xE4,buf[1] = 0xF1,buf[2] = 0xC3,buf[3] = 0xA8......。我们知道字符串中的字符在计算机中大小是其ASCII码值,比如E的ASCII值是69,但是E如果作为一个十六进制数...原创 2020-03-19 14:11:00 · 8820 阅读 · 0 评论 -
c++ #if 0 的用法
使用举例#if 0 code;#endif(1)code中定义的是一些调试版本的代码,此时code完全被编译器忽略。如果想让code生效,只需把#if 0改成#if 1(2)#if 0还有一个重要的用途就是用来当成注释,如果你想要注释的程序很长,这个时候#if 0是最好的,保证不会犯错误。(但是林锐的书上说千万不要把#if 0 来当作块注释使用)#if ...原创 2020-03-11 19:09:51 · 8656 阅读 · 0 评论 -
C++ DWORD 和 byte char 数组、指针的相互转化
1、DWORD 转byte char 数组、指针byte byteData[1024];// byte数组,示例DWORDdwData = dwReadBytes;// dword数据,示例byteData[0] = (dwData & 0xFF000000) >> 24;// 最高位字节byteData[1] = (dwData & 0...原创 2020-03-09 16:52:46 · 2025 阅读 · 0 评论 -
c++ windows上判断文件是否被占用
所需头文件:#include <io.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/locking.h>#include <share.h>#include <fcntl.h>函数:bool IsFileUsed(const c...原创 2019-12-09 15:46:52 · 3098 阅读 · 0 评论 -
c++ 路径解析文件名
std::string CurlSupport::GetPathName(std::string strFullName){ if (strFullName.empty()) { return ""; } std::string::size_type iPos;#ifdef Q_OS_WIN iPos = strFullName.fin...原创 2019-10-18 10:26:50 · 662 阅读 · 0 评论 -
c++ 类的静态成员变量和静态成员函数
1. 静态成员变量先来回顾一下普通成员变量通过对象名能够访问public成员变量 每个对象的普通成员变量都是专属的,不能在对象之间共享在C++中还可以定义静态成员变量静态成员变量属于整个类所有,所有对象共享类的静态成员变量 静态成员变量的生命周期不依赖于任何对象 可以通过类名和对象名访问public静态成员变量静态成员变量的定义静态成员变量在类的内部声明,声明时直接...原创 2019-10-14 09:16:51 · 146 阅读 · 0 评论