![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 78
Yuzhiyuxia
这个作者很懒,什么都没留下…
展开
-
VC++多线程编程总结
VC中多线程使用比较广泛而且实用,在网上看到的教程.感觉写的挺好.一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:void CSingleThreadDlg::OnS转载 2011-11-25 23:15:36 · 1330 阅读 · 0 评论 -
详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo转载 2011-11-25 23:03:52 · 442 阅读 · 0 评论 -
常数静态成员初始化
class MyClass{ static const int num=100; ....};注意:还必须为class之中声明的常数静态成员定一个空间!const int MyClass::num;原创 2011-11-25 23:06:00 · 963 阅读 · 1 评论 -
VC++的链接错误LNK2005
编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。 造成LNK2005错误主要有以下几种情况: 1. 重复定义全局变量。可能存在两种情况: A、 对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CP转载 2011-12-20 21:16:22 · 884 阅读 · 0 评论 -
QT中的元对象系统(一):QVariant的简单说明
QVariant可以表示QT中的大部分类型,它和pascal中的variant类型或c中的void类型有点相似,不过它的使用和c中的union类似,其实现也是用union,在qvariant.h头文件中,我们可以看到这样定义:class Q_CORE_EXPORT QVariant{ public: enum Type { Invalid = 0,转载 2012-01-08 20:16:27 · 1172 阅读 · 0 评论 -
QT中的元对象系统(二):创建自定义的QT类型
我们在使用QT编程时,难免要定义自己需要的类型,但像QT自己的类型如QSzie、QString之类的,都是可以存储在QViriant中的,并且这些QT的类型是可以用在基于QObject类的类型属性中和基于信号和槽的发生机制中。如果我们想要我们自己自定义的类型可以有QT自己类型的功能的话,我们就必须注册我们的类型到QT中,这样我们才可以在我们在信号和槽的通讯机制中使用我们的类型。在我们想要把转载 2012-01-08 20:13:18 · 731 阅读 · 0 评论 -
VC++ MFC 多线程及线程同步
使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。 如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果都转载 2012-01-11 16:10:31 · 778 阅读 · 0 评论 -
Q_PROPERTY 介绍
QT提供了一个成熟的属性系统,但是作为一个跨平台的且与编译器无关的库,qt不依赖于非标准的编译器功能例如__property or [property];QT的强大之处在于它可以支持任何标准的c++编译器。 QT是基于Meta-Object System(元对象)和signals and slots(信号槽)的.Q_PROPERTYQ_PROPERTY()是一个宏,用来转载 2012-01-12 15:13:56 · 797 阅读 · 0 评论 -
QGraphicsView 中不能刷新的解决方案
在QGraphicsView的事件中,不论使用 update,repaint,抑或updateScence,resetCacheContent, 均不可以刷新界面,对此有两个解决方案:(1)调用 viewport 的update函数(2)调用场景的update(),才能重绘原创 2012-01-12 14:40:22 · 5118 阅读 · 2 评论 -
windows网络编程头文件注意事项
开发新的应用程序时,把WINSOCK2.H文件包含在应用程序中,该程序将使用Winsock2规范。为了和其他旧的Winsock应用程序兼容以及保证Windows CE平台上的程序开发,可以使用WINSOCK.H。另外,还有一个头文件MSWSOCK.H,该头文件用于微软专用编程扩展,这些扩展通常用于高效的Winsock应用程序的开发。在编译采用了WINSOCK2.H的应用程序时,必须链接到WS2原创 2012-01-21 12:19:55 · 1883 阅读 · 0 评论 -
关于QT 中 QDialog的几点,exec show
emit endSession();if (rec == QDialog::Rejected)emit endSession2(); }endSession()和 endSession2()都是A得成员函数。当删除A时,B也会删除(因为B得parent是A),这个时候exec()会返回 QDialog::Rejected,此时下面的 emit endSession2()还会继续执行转载 2011-12-29 21:06:05 · 1264 阅读 · 0 评论 -
MFC ComboBox 使用方法
Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。1、定义控件对应变量假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box原创 2012-02-12 16:21:47 · 864 阅读 · 0 评论 -
VC的CListCtrl控件
1. CListCtrl 样式及设置 LVS_ICON: 每个item显示大图标 LVS_SMALLICON: 每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 如windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料” LONG lStyle; lStyle=GetWind转载 2012-02-12 18:28:10 · 1177 阅读 · 0 评论 -
Vs2008的bug:error C2471: cannot update program database vc90.pdb
这个vs2008一个著名的bug。官方现有解决方案如下: I have found an alternate way for the time beging to avoid C2471 error but it works only in the case of successful release build. for this click Build men原创 2012-02-14 10:23:30 · 2029 阅读 · 0 评论 -
VS2008编译缺少atlrx.h的解决
VS 2008中由于将ALT项目的部分代码剥离出去成为了独立的开源项目,需要用到ALT中正则表达式等功能就需要手动下载。参考:http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=306398下载地址:http://www.codeplex.com/AtlServer 把下载的原创 2012-02-14 10:37:26 · 1099 阅读 · 0 评论 -
VC/MFC中使用RichEdit 要注意的地方
在mfc中使用工具栏里的RichEdit 控件时,应该在对话框构造函数中用AfxInitRichEdit()或者 AfxInitRichEdit2()。放在OnInitDialog()中不起作用,否则的话,程序会运行不起来, 也没有任何编译错误信息。这俩函数是加载 Riched20.dll(Riched32.dll)的。其中加载动态链接库的方法是需要在头文件stdafx.h或构造函数中用这转载 2012-02-14 13:10:13 · 2502 阅读 · 1 评论 -
OpenGL中GLUT 按键处理
GLUT允许我们编写程序,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP)。在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入。 到现在,你应该注意到了,只要你想控制一个事件的处理,你就必须提前告诉GLUT,哪个函数将完成这个任务。到现在为止,我们已经使用GLUT告诉窗口系统,当窗口重绘时我们想调用哪个转载 2012-02-22 10:48:49 · 1691 阅读 · 0 评论 -
OpenGL中GLUT 按键处理
GLUT允许我们编写程序,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP)。在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入。 到现在,你应该注意到了,只要你想控制一个事件的处理,你就必须提前告诉GLUT,哪个函数将完成这个任务。到现在为止,我们已经使用GLUT告诉窗口系统,当窗口重绘时我们想调用哪个转载 2012-02-22 10:35:36 · 10718 阅读 · 0 评论 -
linux多线程创建时使用类成员函数作为参数
实际上所有线程都是用来处理C函数的,而不是C++类成员函数。标准库中提供一个API函数,这个函数以回调函数指针作为线程的执行代码并在单独的线程中调用回调函数。问题是在这样的线程库中不能创建执行对象成员函数的线程;只能使用普通的函数。因此,下列代码是失败的:#include "class1.h"int func (void *param ){pthread_t ptid;转载 2012-02-13 14:22:16 · 2851 阅读 · 0 评论 -
Qt OpenGL Step by Step
http://www.shaiguping.com/2011/03/25/qt-opengl-step-by-step/第一步,创建空工程:文件-》新建文件或工程-》其它项目-》选择空的Qt项目-》第二步,创建文件,选择创建C++源文件,命名为main.cpp(随便,主要是方便记忆,因为等下我们要在里面添加main函数),并添加进pro文件,并添加一下语句,使其成为一个对话框Qt程转载 2012-02-16 20:42:43 · 3712 阅读 · 0 评论 -
MFC中用户自定义类响应自定义消息
这篇技术文章不是讨论经典的MFC中的消息工作机理的,讨论消息工作原理、方式和路径的文章在网上和书本中随处可见。网上众多的讨论都是关于如何响应并进行用户自定义消息映射的;网上还有一些文章介绍如何在自定义类中响应Windows消息,在本文中都简略叙述。但是,网上大部分的文章没用透彻阐述如何在用户自定义类中响应自定义消息这一通用方法。问题定义如下:用户自定义一个类,这个类不一定要有界面(完全可以是不转载 2012-02-15 11:28:14 · 763 阅读 · 0 评论 -
mfc中rich edit实现自动换行的设置
在属性中设置了mulitiline属性为TRUE,wantreturn属性,也要设置为true。Auto HScroll也要设置为FALSE原创 2012-02-16 13:54:05 · 5381 阅读 · 3 评论 -
C++中char*与wchar_t*之间的转换
把char*转换为wchar_t*用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char *CStr = "string to convert";size_t len = strlen(CStr) + 1;size_t converted = 0;wchar_t *WStr;WStr=(wchar_t*)转载 2012-03-04 16:49:31 · 949 阅读 · 0 评论 -
c/vc++ 环境下不同的文件长度获取方法
对文件操作时有时获得文件的大小时必要的.( 一)下面是获得其大小小的较简单方法.#include //C语言头文件#include //for system();using namespace std;int main(){ int handle; handle = open("test.txt", 0x0100); //open file for re转载 2012-03-09 12:06:27 · 743 阅读 · 0 评论 -
fatal error C1853 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和 .cpp 源文件,则可能收到 C1853 编译器错误:fatal error C1853: 'pjtname.pch' precompiled header file is from a previous version of the compiler, or the p转载 2012-03-19 12:17:22 · 1073 阅读 · 0 评论 -
UDP/TCP穿越NAT的P2P通信方法研究
内容概述:在p2p通信领域中,由NAT(Network Address Translation,网络地址转换)引起的问题已经众所周知了,它会导致在NAT内部的p2p客户端在无论以何种有效的公网ip都无法访问的问题。虽然目前已经发展出多种穿越NAT的技术,但相关的技术文档却很少,用来证明这些技术的稳定性和优点的实际数据更少。本文的目的在于描述和分析在实际中运用得最广泛、最可靠同时也是最简单的一种NA转载 2012-04-20 16:19:17 · 1013 阅读 · 0 评论 -
SQL模型类-QSqlTableModel模型
QSqlTableModel类继承至QSqlQueryModel类,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序常用函数QVariantheaderData ( intsection,Qt::Orientationorientation, introle= Qt::DisplayRole ) const 获取水平头或垂直头标题bool setH转载 2012-06-02 14:48:06 · 764 阅读 · 0 评论 -
几种函数调用方式
__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 _stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右到左依次入栈转载 2012-06-06 18:52:45 · 809 阅读 · 0 评论 -
Qt多线程学习
QT通过三种形式提供了对线程的支持。它们分别是,一、平台无关的线程类,二、线程安全的事件投递,三、跨线程的信号-槽连接。这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势。多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应。在Qt的早期版本中,在构建库时有不选择线程支持的选项,从4.0开始,线程总是有效的。线程类Qt 包含下面一些转载 2012-06-07 11:27:11 · 1100 阅读 · 0 评论 -
STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有转载 2012-06-22 10:59:48 · 411 阅读 · 0 评论 -
Windows 7下:应用程序无法正常启动(0xc0150002)
在新系统中正确安装QQ2010无法运行,同时安装的TM2009也无法运行。同样显示为“应用程序无法正常启动(0xc0150002)。请单击“确定”关闭应用程序”。在百度,Google中搜索中发现有许多人遇到了同样的问题,而且软件也不限于腾讯软件,有摄像头、CAD的各种软件。 打开查看后发现大多数答案并不正确,也无法解决这个问题。经过我的研究以上软件,发现转载 2012-06-25 19:56:29 · 18887 阅读 · 0 评论 -
检查指定端口被哪个进程占用,并结束它
如果要检查某一特定端口在被哪一个进程所使用,可能要费点心思。做网络的朋友应该十分熟悉一个命令:netstat -ano,在控制台(CMD)运行该命令时,可以列出当前所占用的所有端口,我们不妨也借助与系统中所提供的这个命令,然后分析运行结果就行了!简单的解决方案如下:(windows下注意某些命令只能在命令解析器下执行,不能直接当作一个进程来执行)1. 在程序中启动一个新的进程,该进程的转载 2012-08-02 22:11:50 · 3221 阅读 · 0 评论 -
QWidget: Must construct a QApplication before a QPaintDevice
一个QT程序,在Windows下编译运行正常;现在在Linux下编译成功之后运行的时候,程序却异常退出,命令行提示:QWidget: Must construct a QApplication before a QPaintDevice。字面意思是必须在一个QPaintDevice对象(这里是QWidget,QWidget是QPaintDevice的子类)之前,先创建好QApplicati转载 2012-07-18 21:43:59 · 6105 阅读 · 1 评论 -
网络库
1. ACE - Adaptive Communication Environment http://www.cs.wustl.edu/~schmidt/ACE.html2. Common G++ (GNU) http://www.gnu.org/software/commoncpp/3. Socket++ version 1.11 http://www.cs.utex转载 2012-07-19 13:07:09 · 656 阅读 · 0 评论 -
C++著名程序库的比较和学习经验
1、C++各大有名库的介绍——C++标准库2、C++各大有名库的介绍——准标准库Boost3、C++各大有名库的介绍——GUI4、C++各大有名库的介绍——网络通信5、C++各大有名库的介绍——XML6、C++各大有名库的介绍——科学计算7、C++各大有名库的介绍——游戏开发8、C++各大有名库的介绍——线程9、C++各大有名库的介绍——序列化10、C++各大有转载 2012-07-19 15:24:40 · 1323 阅读 · 0 评论 -
QT定时器使用心得
QT定时器非常好,只要注意跨线程问题使用定时器的注意事项:1. QT定时器线程相关的使用注意事项: 1> 不能夸线程启动定时器和停止定时器1> 不能夸线程启动一个定时器关联的对象,但在另一个线程释放(析构)此和定时器关联的对象(相当于1>的情况不能在其他线程停止定时器). qWarning("QObject::killTimers:timers can转载 2012-07-21 23:27:31 · 5269 阅读 · 0 评论 -
VS2008 Release模式下的调试设置
VS2008 C++项目 Release模式下的调试设置 Solution Explorer选中项目,右键-->properties:Configuration Properties--->C++------>General--------->Debug Information Format->Program DataBase for Eidt & Continue(/转载 2012-08-08 00:29:56 · 1128 阅读 · 0 评论 -
“应用程序无法启动,因为应用程序的并行配置不正确”问题的解决
应用程序事件日志中:“C:\windows\system32\test.exe”的激活上下文生成失败。找不到从属程序集 Microsoft.VC80.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。请使用 sxstra转载 2012-08-24 09:59:13 · 17767 阅读 · 0 评论 -
一个非常有趣的QTcpServer多线程编程问题
Qt 4.6自带的threaddedfortuneserver是个简单明了的 Qt C/S网络编程server端程序的例子, 该例子演示了 QTcpServer与QThread配合的方法。 代码不多, 但包含了Qt网络编程的几个关键点。- FortuneServer类从QTcpServer派生, 调用QTcpServer::listen() 监听端口等待client连接- Fortun转载 2012-08-24 13:28:01 · 4729 阅读 · 0 评论 -
UNICODE,GBK,UTF-8区别
Qt中使用QString的字符串采用的是Unicode编码,我们使用的Windows系统是GBK编码(一种中文编码),linux下通常使用的是UTF-8编码。简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是不兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与gbk就是不一样的,假设uncode为a转载 2012-09-10 16:54:47 · 980 阅读 · 0 评论