工作线程与消息循环
首先声明,这里的工作线程与UI线程是相对的,即没有任何窗口的。如果需要与主线程或其它辅助线程通讯,有几种方法如事件、消息和信号等,也可以是以上几种方法的综合运用。下面就列出以下3种通讯方法的代码框架。 只用消息通讯 1 DWORD ThreadProc(LPVOID lParam) 2 { 3 //创建线程消息队列 4 MSG msg; 5...
View Articlebasic_string内存泄露问题之分析解决
最近在工作中,写一计算杆塔绝缘子中心点的GPS坐标程序时,定义了一结构,里面用到了string类型来存储杆塔所属线路号、杆塔号,杆塔模型名称。代码如下: 1/* 2 @brief 杆塔信息结构 3*/ 4typedef struct _TOWER_INFO 5{ 6 string strLineNo; ///< 线路号 7...
View ArticleATL和WTL中的消息反射
WTL是窗口模板库(Windows Library Template)的简称,是一套轻量级C++ GUI库,因为它使用了C++模板封装了窗口界面操作API和消息映射处理,它扩展了ATL中的UI窗口部分,并支持如下更多的功能特性: (1) 对话框和通用控件:包括对话框数据交换(DDX),子类化,控件消息通知与反射等 (2)...
View Article模板类的数组特化
摘要: 一般地,泛型容器的设计实现大多只是存储了类型的单个对象,而没有存储类型的多个对象,如果有这样特定的需求,容器内的元素要求都是某个类型的多个对象,那么这时就可以考虑用模板类的数组特化来实现了,作为例程,下面C++代码描述了主模板实现 Code highlighting produced by Actipro CodeHighlighter (freewa......
View Article多窗口的组合与分离(2):实现
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->...
View Articledefault constructor和copy constructor小结
一、default constructor---默认构造函数,亦即无参构造函数。从对象构造语义上讲,可分为以下2种:1)trivial 平凡的,可以理解为浅构造 2)notrivial 非平凡的,可以理解为深构造。当一个class没有显式地(explicitly)声明或定义任何constructor的时候,一个default...
View Article观察者模式之应用: 系统托盘图标类的设计
摘要: 关于系统托盘图标类,网上也有很多的代码,但都不太简洁灵活易用,为了这一目的,本人自行封装了一个API版本的实现类,这个类的设计思想来源于观察者模式,从而较好地解耦了托盘通知消息的发送、接收、处理这三者间的关系,使这三者可以是同一个对象,也可以是不同的对象,具体的情况可根据业务逻辑灵活选择控制,主要包括以下几方面的特点:1)对于托盘通知消息的接收处理,提供了一个默......
View Article多标签视图类CTabView的设计实现
摘要: 在MFC9(在vc2008和vc2010中,已经有了CTabView的现成类)以前的版本中,有CListView,CTreeView,CEditView,CRichEditView等控件视图类,但就是没有类似的CTabView类,因工作需要,最近在做一个简单的多标签IE浏览器,开发环境是vs2005,基本框架是sdi + chtmlview + ctabview......
View Article使用子类化截获窗口消息
摘要: 在《多标签视图类CTabView的设计实现》一文中,CTabView从CBasicSubClassWnd私有继承,重写其虚函数SubWindowProc,捕获WM_DRAWITEM和TTN_GETDISPINFO消息,从而实现了DrawItem和UpdateTooltipText虚函数回调机制,支持派生类的自定义处理,而CBasicSubClassWnd就是一个......
View Article真彩色静态框CColorStatic类的设计实现
摘要: 关于cstatic控件的自绘,网上也有很多的代码及文章,更有其界面画得很漂亮的、多种多样的功能。近来我自行封装实现了一个真彩色静态框类,目标初衷是从颜色、字体、光标入手,改变原始标准cstatic的色彩风格,使界面初步美化,具有好看的效果。同时作为一个基础简单的类来维护,为后续的功能增强及美化提供参考扩展,这个CColorStatic类的特点及功能如下:(1)文......
View Article模板元编程(1):选择API
摘要: C与C++ API的比较 在c语言中,API体现为c函数,如操作系统提供的一系列API,在c++中,API体现为自由函数,这里的自由函数是指除普通成员函数、静态成员函数、友元函数外的能在某命名空间作用域或全局空间内直接访问的函数,而这更多地体现为函数模板,如stl提供的一系列算法swap、count和sort等。相对于c API,c++ API具有类型安全和封......
View Article模板元编程(2):计算最值
本文就Loki编译期技术中的类型列表Typelist作了一些扩展,增加了以下几个方法: • 获取最大和最小长度,即求取Typelist中长度最大和最小的值 • 获取最大和最小类型,即求取Typelist中长度最大和最小的类型实现...
View Article模板元编程(3):类型选择
摘要: 类型选择是一种编译时的类型计算技术,也就是根据条件判断来匹配对应的类型,功能形如运行时的if else和switch case控制结构。在这里仿真运行时的条件语句,实现了类型选择,包括if单分支、if多分支和switch case三种结构,关于其原理及细节就不多讲了,直接看如下代码 (1)if单分支 Code ... 阅读全文春秋十二月 2012-06-06...
View ArticleGCC原子操作类模板
摘要: 主类模板 gcc从4.1.2版本开始提供了__sync_*系列的内置API,用于加减和逻辑运算,可以对1,2,4,8字节长度的数值或指针类型进行原子操作,为方便使用,笔者对这些API作了简单的封装。 Code highlighting produced by Actipro CodeHighlighter (freeware) http://... 阅读全文春秋十二月...
View Article一种简单的跨平台用户态自旋锁
自旋锁作为一种并发同步的手段,特别适用于竞争少和锁时间短的情况,在驱动及内核代码中经常被用到,本文讲述一种适合用户态程序的自旋锁,支持Windows和Linux(GCC>=4.1.2)平台,并提供了C语言的接口和实现。 接口 spin_trylock如果获取成功返回1,否则返回0;spin_is_lock如果已加锁,返回1,否则返回0。 1typedef struct 2{...
View Article一种简单的跨平台互斥锁
摘要: 互斥锁,用来保证任一时刻只有单个线程或进程拥有对共享资源的互斥访问权,在这里将posix thread中的互斥体、win32中的互斥体和临界区,统称为互斥锁,其特点如下: ● 范围:线程锁和进程锁,前者仅用于同一进程内多线程间,而后者用于进程间,显然,它也能用于同一进程内多线程间,但效率较低。posix的互斥体既可以是线程锁,... 阅读全文春秋十二月...
View Article一种简单的跨平台信号量
摘要: 信号量是一种用于并发环境同步手段的原语,分为无名信号量和有名信号量两种,前者只能用于线程间同步,而后者还可用于进程间同步。它包括创建、等待、挂出、取值和销毁5种基本操作。与互斥锁不同的是: ● 信号量拥有一个计数值,表示可用的资源数量,仅当该值为0或1时,则相当于互斥锁。 &... 阅读全文春秋十二月 2012-07-20 10:52 发表评论
View Article
More Pages to Explore .....