
C/C++
文章平均质量分 57
fxfeixue
这个作者很懒,什么都没留下…
展开
-
std::condition_variable notify_one()与notify_all()的区别
本文转载自xupeng1644的同名博文notify_one()与notify_all()常用来唤醒阻塞的线程,线程被唤醒后立即尝试获得锁。notify_one()因为只唤醒一个线程,不存在锁争用,所以能够立即获得锁。其余的线程不会被唤醒,需要等待再次调用notify_one()或者notify_all()。notify_all()会唤醒所有阻塞的线程,存在锁争用,只有一个线程能够获得锁。那其余未获取锁的线程接着会怎么样?会阻塞?还是继续尝试获得锁?答案是会继续尝试获得锁(类似于轮询),而不会再次阻塞转载 2021-02-06 16:28:38 · 1256 阅读 · 0 评论 -
串行通信API函数及参数说明
串行通信API函数及参数说明——以下多数内容摘自《Visual C++/Turbo C 串口通信编程实践(第2版)》补充关于流控制概念流控制解决的问题:当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。PC机中常用的两种流控制是软件流控制XON/XOFF(继续/停止)和硬件流控制(包括RTS/CTS、DTR/CTS等)。在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)原创 2020-07-30 15:57:26 · 871 阅读 · 0 评论 -
C++和双重检查锁定模式(DCLP)的风险
转载自nodeathphoenix。1 简介当你在网上搜索设计模式的相关资料时,你一定会找到最常被提及的一个模式:单例模式(Singleton)。然而,当你尝试在项目中使用单例模式时,一定会遇到一个很重要的限制:若使用传统的实现方法(我们会在下文解释如何实现),单例模式是非线程安全的。程序员们为了解决这一问题付出了很多努力,其中最流行的一种解决方法是使用一个新的设计模式:双重检查锁定模式(DCLP)[13, 14]。设计DCLP的目的在于在共享资源(如单例)初始化时添加有效的线程安全检查功能。但转载 2020-06-18 16:03:34 · 640 阅读 · 0 评论 -
关于VC和GCC中调用C DLL的一些问题
原文地址:https://blog.youkuaiyun.com/funkri/article/details/8550290关于VC和GCC中调用C DLL的一些问题最近在罗云彬的琢石成器上看到DLL部分,产生了让GCC和VC互相调用对方产生的DLL的想法。由于C++的函数名改编问题,其dll不具有二进制级别的共享性,也就是说VC和GCC的C++ dll不能混用,但C的可以。我试验了一下,使用VC和GCC分别生成了一个简单的DLL然后由对方调用,结果可以成功,另外还顺带完成了一个DLL导出lib和a的脚本..转载 2020-06-10 09:22:37 · 627 阅读 · 0 评论 -
用G++编译C++代码报错:In instantiation of 'struct std::iterator_traits<xxx>'
… In instantiation of ‘struct std::iterator_traits<xxx>’:required from '_OI std::__copy_move_a(_II, _II, _OI) …required from '_OI std::__copy_move_a2(_II, _II, _OI) …required from '_OI std::c...原创 2019-04-10 11:01:17 · 4242 阅读 · 0 评论 -
C++在Windows系统中获取主要网络设备的MAC地址
最近程序中需要获取机器物理网卡的MAC地址,通过GetAdaptersInfo函数虽然能够获得网卡信息,但无法判断哪个是物理网卡。 参考了 weiyumingwww 的文章——用 Windows API “GetAdaptersInfo” 获取 MAC 时遇到的问题 ,它通过读取注册表区分出物理网卡,然而某些时候,物理网卡还包含了“蓝牙”和“Wi-Fi”的MAC,这可能并不是我们想要的结果。 ...原创 2018-04-29 20:54:12 · 2403 阅读 · 3 评论 -
char *p = "123"和char a[] = "123"根本就不同
示例代码如下: #include int main(void) { char *p = "123"; //等价于char *p; p = "123"; char a[] = "123"; //等价于char a[] = {'1', '2', '3', '\0' }; printf("address a = %p, p = %p,转载 2012-09-13 16:03:55 · 1155 阅读 · 0 评论 -
切换输入法导致程序死机的解决办法
近日在开发类似QQ屏幕截图过程中,发现在输入文字时切换输入法(Ctrl+Shift)时,会导致程序出现“卡死”现象。为了方便代码重用,屏幕截图模块是以动态库方式封装起来的。出现“卡死”现象后,只能通过任务管理器强制杀掉对应的进程才能退出程序。于是,上网搜索了相关话题,发现原因通常是某种输入法如紫光或搜狗输入法导致了程序死机,也可能是某种软件与输入法冲突导致死机。 通过代码注释最终转载 2012-06-21 16:21:29 · 2031 阅读 · 0 评论 -
对 User breakpoint called from code at XXX 问题分析汇总
分析一,转自独奏的同名Blog 今天调试程序时在Debug版跳出这个错误,我程序根本没设置断点,而其好像说是我的堆有问题,而编译了个Release版本运行正常,后来google下,查到如下解释: 说是调试状态下,操作系统用DebugWin32Heap来替代正常的heap分配内存空间。在这个堆上的任何操作debug的堆管理器会检查堆的数据完整性,如果它发现了一个错误,就会转载 2012-05-22 08:56:36 · 14976 阅读 · 0 评论 -
替换STL的queue
STL库是个伟大的作品,不过,有的时候,它也有一点点小问题。我写的一个服务器程序,在运行大约8小时候,出现Program received signal SIGSEGV, Segmentation fault.#1 0x00002adde5c9a853 in _int_free () from /lib64/libc.so.6#2 0x00002adde5c9a99c in转载 2012-05-21 15:03:38 · 1862 阅读 · 0 评论 -
MFC对可Serialize类型的版本控制
使用MFC提供的Serialize功能对类型进行序列化/反序列化非常的方便。当软件升级后,Serialize的内容可能也会发生变化,这时,就可以使用MFC提供的版本控制功能解决反序列化因为内容不同引起的冲突了。编写可序列化类时,MFC用IMPLEMENT_SERIAL宏指定的模式号作为版本控制的依据。反序列化时,MFC将文件中记录的模式号与应用程序中使用的模式号进行对比,如果不匹配,MFC将抛原创 2012-04-10 15:32:53 · 2508 阅读 · 0 评论 -
C++/CLI“未能加载工具箱项xx。将从工具箱中将其移除”的解决方案
C++/CLI是目前唯一支持C++与.net混合编程的语言,但就我个人的使用感受来说,效果不是很理想,这就又出现问题了:创建一个Window Form Application,将其项目属性设置为“公共语言运行时支持(/clr)”,创建一个.net的UserControl,命名为uc1,在Form1的设计界面下,从工具箱拖uc1到Form1上,报错“未能加载工具箱项uc1。将从工具箱中将其移原创 2012-03-05 10:42:44 · 3678 阅读 · 0 评论 -
解决C++/CLI中关于“MissingManifestResourceException类型的未经处理的异常出现在mscorlib.dll”问题一例
声明:本文仅针对下述情况下产生的MissingManifestResourceException异常,标题中已用“一例”进行说明,如果不能解决您的问题,还请多多包涵,实非有意骗取点击量。环境:VS2010+SP1C++/CLI Windows Form Application注:不确定下述方法是否适用于C++/CLI其它类型的项目。一、解决C++/CLI的项目名称与na原创 2012-02-28 10:39:21 · 4875 阅读 · 0 评论 -
C/C++定义全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念:1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌入式下做开发工作的话,那么你可能非常的转载 2011-12-02 13:59:40 · 875 阅读 · 0 评论 -
托管与非托管间的代码级桥梁——C++/CLI
注:此文转自begtostudy的博客我们知道托管与非托管程序之间的桥梁有很多,PIvoke和Mashel,COM和CLR API都算是。然而这些都是模块(assembly)间的桥梁,好处就是方便直接,缺点就是细节上处理不了。是啊,毕竟是两类语言,两类运行环境。如果要更为细腻转载 2011-10-11 10:01:37 · 2196 阅读 · 0 评论 -
使用VS2010的CMFCToolbar实现真彩色工具栏
从VC2008的SP1开始,新加入了很多MFC控件,其界面效果虽然比不上WPF,但与之前的控件相比,也已经是飞越了。无奈目前大家对它的研究还是比较少,虽然自带了一些示例程序,仍然不能满足开发的方方面面。貌似C++的高手更喜欢旧版的MFC控件,这也难怪,新版的控件效果,用旧版的也能原创 2011-08-17 21:38:19 · 12760 阅读 · 7 评论 -
C++中enum枚举类型成员重名问题的解决方法
注:此文章转自hairetz的博客 C++语言中,对于一个枚举类型(enum),其成员值在所属枚举类型的声明作用域内是不可重复的。这个继承自C语言的特性,使我在写程序时碰到有相同名称的枚举成员时,苦于寻找且方便易读的替代枚举名称。这在C++程序开发方面带来了许多的转载 2011-09-08 09:29:24 · 3657 阅读 · 2 评论 -
VC++2010中的"类向导"失效的解决办法
要说VC++2010可比VC++6.0智能多了,但还是时不时的闹点小情绪。 不知道是做了什么操作,类向导不管用了,表现就是:无论添加消息处理还是重载虚函数,只要一点确定就自己关闭了,实际该它做的一点没做。开始以为是自己做了什么误操作,后来无意间,把项目拷到虚拟机里打开,使用类向导一点问题没有,这说明问题出在IDE上。 鬼使神差:在正确的时间,正确的地点,偶找到治表的方法——将解决方原创 2011-06-22 22:21:00 · 7528 阅读 · 2 评论