原文出处:http://www.cnblogs.com/lidabo/p/3328402.html本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。为什么需
C++最重要的特性就是多态,而多态,就主要通过虚函数实现的。具体的实现过程是:基类中的函数定义为虚函数,派生类发生覆盖(即函数名称、参数列表、返回值类型完全相同)的情况下,派生类中的函数也会自动变成虚函数,不论加不加virtual关键字。此时,基类与子类对象中都会存在一张虚函数表(因为含有虚函数),具体虚函数表的结构可以参照这篇文章:http
1 C++类的对象构造的时候,首先申请一片内存,然后调用构造函数进行初始化;我们知道,存在虚函数的话,也会存在一个虚函数表vtable,而虚函数表示在什么时候产生的呢,当然是在调用构造函数之后产生的;那么问题来了,如果构造函数为虚函数,此时的内存是一片空白,不存在该虚函数表vtable,那么无法找到该构造函数;所以说,构造函数不能为虚函数。2 此外,如果有以下代码:class A{ &n
MFC下利用TRACE语句可以很方便的打印调试信息,但是有些时候如果要打印另外的信息,为了分析数据的方便,不想与TRACE的信息混在一起。这个时候,利用控制台输出就是一个比较不错的捷径。虽然有很多局限性,比如,只能开一个控制台等等,但是,这个方法还是比较有吸引力,因为其使用就如同控制台程序一样,比读写文件少一个文件指针。使用方法如下,具体请参考MSDN。 &nb
很多时候,为了界面的美观,我们会隐藏标题栏,而在客户区通过自绘模拟标题栏。但是这样处理,会导致窗体无法移动。下面提供几种移动方法: 1、采用欺骗的方式。即当鼠标点击客户区的时候,我们欺骗windows,让windows认为我们点击在了标题栏,这样,拖动过程就通过windows进行处理了。因此可以大大减少我们的代码量。具体方法如下:响应鼠标左键按
默认情况下,窗口是不响应WM_MOUSELEAVE和WM_MOUSEHOVER消息的,所以要使用_TrackMouseEvent函数来激活这两个消息。调用这个函数后,当鼠标在指定窗口上停留超过一定时间或离开窗口后,该函数会Post这两个消息到指定窗口。使用方法:1.在对话框类中定义一个变量来标识是否追踪当前鼠标状态,之所以要这样定义是要避免鼠标已经在窗体之上时,一移动鼠标就不断重复产生WM_MOU
1.CDC *pDC和HDC hdc有什么不同,类似的有CWnd *pWnd和HWnd?pDC是类指针HDC是windows句柄通过pDC获得hdc:HDC hdc=pDC->GetSafeHdc();通过hdc获得pDC:CDC *pDC=new CDC;pDC->Attach(hdc);2.hDC和CDC有本质区别HDC是WINDOWS的一种数据类型,是设备描述句柄。而CDC是MF
想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好。第二种方法是GetProcessImageFileName函数,这个函数在Windows XP及其以后的系统中都能使用,使用此函数返回的路径不是通常的系统盘符,如"C:\...",而是驱动层的表示方
VC6.0中默认使用的是多字节编码,而从VS2005以后,默认使用的是Unicode字符编码方式,尤其在VS2013中还取消了对于多字节编码的支持,需要额外安装插件。如果使用多字节编码就不会遇到本文所说的问题,但是用Unicode字符编码方式也是有好处的,除了支持程序主题更美观,更重要的是统一编码标准。这或许就是vs中取消多字节编码的一个原因吧
有时候,我们在使用API定时器时,需要使用类的成员函数作为其回调函数,但是,编译器为了保护成员函数,编译是不能通过的。那么我们怎么才能使用类的成员函数作为API定时器的回调函数呢?我们可以嵌入一段汇编代码来绕过编译器的检查。举个例子: 假设我们一个类的成员函数定义为void CALLBA
一、控件的介绍MFC中封装了许多有用的类,CTabCtrl和CPropertySheet是其中两个比较常用的类型。CTabCtrl即Tab控件对应的类,Windows应用程序中大量使用了Tab控件。属性页对应的是CPropertySheet,你在桌面上右键鼠标弹出的显示对话框就是一个CPropertySheet类型的对象。事实上这类弹出的、类似“属性页”的窗口大部分都是CPropertySheet
使用CHotKeyCtrl为程序添加热键功能,进行主界面的显示隐藏,类似于老板键,具体操作如下:第一:获取设置的热键并使用RegisterHotKey进行热键的注册,代码如下://获取热键键值 CHotKeyCtrl* photk=(CHotKeyCtrl*)GetDlgItem(IDC_HOTKEY1); WORD vkey,fsmoderfiers; photk->G
使用Visual Studio 2008编译链接程序的时候,遇到链接错误,错误信息如下:fatal error LNK1000: Internal error during IncrBuildImage一般有如下3中解决方案:第一:该问题仅仅在第一次编译的时候出现,重新编译就可以运行了;第二:去微软官方下载KB948127补丁程序(见附件,但大多数机器安装不上,本人的机器也无法安装);第三(该内容
以CListCtrl为例,使用CFileFind类查找文件并获取文件的图标填充到CListCtrl中主要代码如下:int CTestDlg::OnInitDialog(void) { //获取控件指针 CListCtrl* plst_ctl=(CListCtrl*)GetDlgItem(IDC_LIST1);//IDC_LIST1为CListCtrl控件的ID //添加图标(将
MFC编程中对于剪切板的简单使用,复制和粘贴文本
两种方法使MFC程序具有Xp风格的界面
计算机的内存空间都是按照字节来划分的,从理论上讲,对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型的数据按照一定的规则在空间上排列,而不是顺序的一个接着一个排列,这就是内存对齐。 内存对齐是为了提高CPU对数据的访问速度(特别是
一些函数定义中,在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整型;但是vs2008/vs2010不支持默认整型,解决这个问题不能修改每个没有显示指示返回值类型的函数地方,可以用排除4430来解决;具体的在打开project->BaseClasses properties->config
很多朋友在安装VC++6.0后,无论编写多么简单的程序,点击编译或者链接后出现这样的一个错误提示:Error spawning c1.exe,很是郁闷。很多人想都没想选择重装VC++6.0,可是很多人重装后,又出现了同样的问题。总不能因为这样的一个小问题而重装操作系统吧。 &n
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号