自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(274)
  • 资源 (2)
  • 收藏
  • 关注

转载 Multiple Threads in the User Interface

https://msdn.microsoft.com/zh-cn/library/ms810439.aspx

2017-08-14 08:52:41 597

转载 Linux 下定时器的实现方式分析

概论定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持,但使用场景的不同,对定时器的实现考虑也不尽相同,本文讨论了在 Linux 环境下,应用层和内核层的定时器的各种实现方法,并分析了各种实现方法的利弊以及适宜的使用环境。首先,给出一个基本模型,定时器的实现,需要具备以下几个行为,这也是在后面评判各种定时器实现的一个

2017-02-04 10:09:58 5510

转载 一些共通的函数实现

一些共通的函数实现 常用的宏定义    说明,这些宏可能在下面的函数中用到,如果要想直接反这些函数拷来用的话,一定要正确定义这些宏(这些宏定义也要一起拷贝)   下面这些函数都很独立,也就是说,你直接把这个函数拷到你的代码中,就可以用,前提是你要把一些头文件及我定义的宏加上。 1,根据文件路径提取其ICON2,根据文件

2016-09-18 11:40:38 1610

原创 各种锁的效率比较

Win7, 64位,i5-4460,双核4线程,循环1KW次除法经测试,DEBUG下:普通CRITICAL_SECTION :5000ms自旋锁:3800msHP-SOCKET CSpinGuard:2700Release:普通CRITICAL_SECTION :800ms自旋锁:2200msHP-SOCKET CSpinGuard:12

2016-07-22 15:42:21 1668

原创 HTCAPTION与WM_NCLBUTTONDBLCLK及最大化的关系

WM_NCHITTEST返回HTCAPTION后,触发系统发送WM_NCLBUTTONDBLCLICK,,此时再发送SendMessage(m_hWnd, WM_SYSCOMMAND,SC_MAXIMIZE,0);一般就可以最大化窗口,但是现在遇到一个奇怪的消息WM_SYSCOMMAND + 0xF122(SC_RESTORE+2),感觉最大化后瞬间又还原了,过滤掉这个消息后就都正常了,

2016-07-01 09:02:43 1678

原创 MFC DLL创建对象

使用MFC DLL中创建的对象,貌似必须是new的,且DLL中窗口的销毁必须在MFC退出之前,即必须手动删除,不然DLL中的窗口销毁时,获取afxMapHWND会崩溃

2016-05-31 15:39:39 679

原创 类的初始化

class Base{  public:      int m_val;};void main(){     Base b;     std::cout }1.没有任何构造函数的定义时,运行程序崩溃2.定义一个空的构造函数   Base()   {}  程序可以正常运行,但m_val为随机值3.这样定义 Base* b = new

2016-03-29 10:04:47 578

转载 TCP状态知识总结(图解)

tcp状态: LISTEN:侦听来自远方的TCP端口的连接请求SYN-SENT:再发送连接请求后等待匹配的连接请求SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认ESTABLISHED:代表一个打开的连接FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认FIN-WAIT-2:从远程TCP等

2016-01-19 16:25:09 944

原创 架构&设计模式

设计模式1.Command接口与实现的分离,接口固定2.Visitor数据与操作的分离3.Builder部件与创建算法的分离4.Decorate给部分子类增加功能,并且具有通用性(这是跟Adapter的区别)"Decorator模式重在不生成子类即可给对象添加职责"明明集成了接口,生成了子类么5.Bridg

2015-08-03 15:08:10 566

转载 内存对齐的影响

先说理论的:为何要内存对齐?1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、 性能原因:经过内存对齐后,CPU的内存访问速度大大提升。图一:这是普通程序员心目中的内存印象,由一个个的字节组成,而CPU并不是这么看待的。 图二:CPU把内存当成是

2015-07-29 11:07:26 933

原创 模版小结2

// test2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include templatestruct integral_constant {  static const T value = v;  typedef T value_type;  typedef i

2015-07-28 10:49:37 427

原创 模版小结

1.模版函数,模版类都可以只声明,不定义//这个地方必须声明,不然编译错误template class RunnableAdapter;template class RunnableAdapter { public:  typedef R (RunType)();  explicit RunnableAdapter(R(*function)(

2015-07-28 09:35:35 556

转载 C++ POD与结构体声明

请看下面这个结构体定义:struct MyStruct { int i; wstring str; vector strs; };上面的结构休定义有问题吗?理论上说没有,但在某些情况下就有问题了。如下用法:MyStruct *pMy = new MyStruct(); //memset(pMy, 0, sizeof(MyStruct)); pMy->i = 100;

2015-07-28 09:23:51 983

转载 析构与代码膨胀

毫无疑问,内联析构函数可能时程序代码膨胀的一个源泉,因为它被插入到函数中的每个退出点,以析构每一个活动的局部类对象。例如,在如下代码段中:Account acct ( “Tina Lee” ); int swt;// ... switch( swt ) { case 0: return; case 1: // 进行操作 return; case

2015-07-24 10:59:56 852

转载 C++中的类型擦除(type erasure in c++)

关于类型擦除,在网上搜出来的中文资料比较少,而且一提到类型擦除,检索结果里就跑出很多 Java 和 C# 相关的文章来(它们实现“泛型”的方式)。所以,这一篇我打算写得稍微详细一点。 注意,这是一篇读书笔记(《C++ template metaprogramming》第9.7小节和《C++ テンプレートテクニック》第七章),里面的例子都来自原书。在 C++ 中,编译器在编译期进行的静态

2015-07-24 10:46:44 2877

转载 不简单的单例模式Singleton

单例模式,即Ensure a class only has one instance, and provide a global point of access to it,只有一个实例,是一种非常简单的设计模式,实现的方法有很多种,要完美的实现这种看似简单的设计模式其实不简单。要实现完美的方案,以下四个问题不能避免:(1)无内存泄露首先得是正确的方案,那么不能有内存泄露,这个在程

2015-07-23 18:40:16 575

转载 C++标准转换运算符reinterpret_cast

reinterpret_cast (expression)reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。后半句倒是看出了reinterpret_cast的字面意思:重新解释

2015-07-14 09:20:50 494

转载 时间转换

转自:http://blog.youkuaiyun.com/educast/article/details/172397351、常用的时间存储方式    1)time_t类型,这本质上是一个长整数,表示从1970-01-01 00:00:00到目前计时时间的秒数,如果需要更精确一点的,可以使用timeval精确到毫秒。    2)tm结构,这本质上是一个结构体,里面包含了各时间字段    struct tm 

2015-06-04 18:06:05 601

转载 两小时狂赚1000万!这一切怎么“成功”完成?

原文地址前几天,在一个几乎囊括国内知名IT自媒体的微信群里,各位IT自媒体大神对某自媒体人在虎嗅上号称月入30万的真实性提出了严重质疑,展开了一场关于自媒体生存的大讨论。少见多怪了。就在前一天,在广州,某个1500多人参加的论坛上,有一位大师仅演讲了2个小时,就让现场很多学员掏了腰包,狂赚1000万(预估)。这一对比,只能怪自媒体人选错了行,

2014-07-18 13:53:19 1931

转载 IOCP使用时常见的几个错误

在使用IOCP时,最重要的几个API就是GetQueueCompeltionStatus、WSARecv、WSASend,数据的I/O及其完成状态通过这几个接口获取并进行后续处理。GetQueueCompeltionStatus attempts to dequeue an I/O completion packet from the specified I/O completion po

2014-07-14 15:08:09 1570

转载 深入剖析TCP协议的send与recv

一、 滑动窗口的概念        TCP数据包的TCP头部有一个window字段,它主要是用来告诉对方自己能接收多大的数据(注意只有TCP包中的数据部分占用这个空间),这个字段在通信双方建立连接时协商确定,并且在通信过程中不断更新,故取名为滑动窗口。有了这个字段,数据发送方就知道自己该不该发送数据,以及该发多少数据了。TCP协议的流量控制正是通过滑动窗口实现,从而保证通信双方的接收缓冲区

2014-07-14 15:06:58 657

转载 关闭TCP连接的学问

从TCP协议角度来看,一个已建立的TCP连接有两种关闭方式,一种是正常关闭,即四次挥手关闭连接;还有一种则是异常关闭,我们通常称之为连接重置(RESET)。        首先说一下正常关闭时四次挥手的状态变迁,关闭连接的主动方状态变迁是FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT,而关闭连接的被动方的状态变迁是CLOSE_WAIT->LAST_ACK->TIME_W

2014-07-14 15:00:42 606

转载 boost.timer

#include #include #include using namespace boost;templateclass new_progress_timer : public boost::timer{public:new_progress_timer(std::ostream & os = std::cout):m_os(os){

2014-07-11 10:31:23 468

转载 C++“准”标准库Boost学习指南(2):Boost.Conversion

Conversion库包含有一些函数,它们是现有的强制类型转换操作符(static_cast, const_cast, 和 dynamic_cast)的增强。Conversion为安全的多态转换增加了 polymorphic_cast 和 polymorphic_downcast,为安全的数字类型转换增加了 numeric_cast,为文本转换(如string 和 doub

2014-07-10 14:37:41 1195

转载 boost.锁

boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁mutex对象类mutex类主要有两种:boost::mutex,boost::shared_mutex,其中mutex有lock和unlock方法,shared_mutex除了提供lock和unlock方法外,还有shared_lock和shared_unlock方法。因此,bo

2014-07-09 15:39:47 586

转载 ASIO学习

boost::asio::Io_service构造函数构造函数的主要动作就是调用CreateIoCompletionPort创建了一个初始iocp。Dispatch和post的区别Post一定是PostQueuedCompletionStatus并且在GetQueuedCompletionStatus 之后执行。Dispatch会首先检查当前thread是不是io_serv

2014-07-08 17:14:00 729

转载 boost::asio::io_service::work类

work是一个很小的辅助类,只支持构造函数和析构函数。(还有一个get_io_service返回所关联的io_service)   构造一个work时,outstanding_work_+1,使得io.run在完成所有异步消息后判断outstanding_work_时不会为0,因此会继续调用GetQueuedCompletionStatus并阻塞在这个函数上。  而析构函数中将其-1,并判

2014-07-08 11:02:51 13112

转载 Boost.Locale 之字符转换 gbk utf8 big5 string wstring等

Boost.Locale是一个库,它提供高质量的本地化的设施在C + +的方式。它最初是设计的一部分CppCMS - C + +的Web框架的项目,然后促成了提升。Boost.Locale提供强大的工具,跨平台的本地化软件开发 - 这会谈到用户在其语言的软件。提供的功能:正确的大小写转换,大小写和规范化。整理(排序),其中包括4 Unicode排序规则层面的支持。日期,时间

2014-07-07 16:33:57 1972

转载 C++之国际化(3) --- facet

国际化议题通常被划分为数个不同的模块,例如:数值、日期时间、货币等国际话的每个模块由locale内不同的对象处理,我们将这样一个处理某一模块的对象称为facetlocale则扮演了facet的容器。要存取locale的某个模块,可以相应的facet型别作为索引。将facet作为template参数,传递给use_facet()函数,便可以取得特定的facetstd:

2014-07-07 15:11:50 1119

原创 streambuf

#include "stdafx.h"#include #include #include #include #include #include #include template >class basic_outbuf : public std::basic_streambuf{public:int size(){return pptr

2014-06-27 15:12:45 839

原创 imbue(std::locale());

#include //void Write(std::wstring& data){std::wofstream f;f.imbue(std::locale("chs"));f.open("test.txt", std::ios::out);f.seekp(0, std::ios::beg);f f.close();f.clear();}

2014-06-27 10:13:45 5168

转载 Socks5代理协议 Socks V5

Socks代理协议是作为【应用层】与【传输层】之间的一个中间层。一、首先客户端向服务器端发起socks代理请求+—-+———-+———-+|VER | NMETHODS | METHODS |+—-+———-+———-+| 1 | 1 | 1 to 255 |+—-+———-+———-+上面的数字表示字节数。VER段为协议版本就是0×05,NMETHODS为后面ME

2014-06-26 16:02:33 8417

转载 ASSERT与VERIFY宏的区别

http://blog.vckbase.com/smileonce/articles/1184.htmlhttp://www.epubcn.com/edoctips/contents/computer/debug_release_diff.xml今天公司有同事问我ASSERT与VERIFY宏有什么区别,虽然平时常用这两个宏对一些变量在Debug模式下作判断,但一时还真答不上来二者之

2014-06-18 15:04:11 686

转载 最快速度找到内存泄漏

确认是否存在内存泄漏我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏。例如:class CMyApp : public CWinApp{public:   BOOL InitApplication()   {       int* leak = new int[10];       return TRUE;   

2014-06-18 14:29:21 542

转载 使用_CrtSetDbgFlag检测内存泄露

介绍:动态分配、回收内存是C/C++编程语言一个最强的特点,但是中国哲学家孙(Sun Tzu,我不知道是谁?那位知道?) 指出,最强的同时也是最弱的。这句话对C/C++应用来说非常正确,在内存处理出错的地方通常就是BUGS产生的地方。一个最敏感和难检测的BUG就是内存泄漏-没有把前边分配的内存成功释放,一个小的内存泄漏可能不需要太注意,但是程序泄漏大块内存,或者渐增式的泄漏内存可能引起的现象是

2014-06-18 14:22:45 598

转载 沟通的一些规律(取自知乎)

已更新,详见4月8日更新部分。看了几个高票答案,感觉有点荒谬,荒谬的同时竟然还很有趣。简单评论一下:务实是前提。如果权力和资源是无限的,那么就不需要任何沟通技巧。你不听话?给你钱;还不听话,拉出去砍了。这不是直至本质,而是更换了前提。美德不能滥用。坦率、诚恳、诚实这些都是值得称赞的品德,但是如何沟通才称得上坦率、诚恳、诚实呢?面对顾客,坦言产品38种缺点;面对想挽留员工怒斥公司

2014-04-30 09:55:24 5015

转载 IOCP中多次投递WSASend

关于IOCP中是否可以对同一socket连续投递的疑问已经很久了,主要的疑问在wsaSend是否可以保证数据的完整发送,是否会出现部分发送成功的情况?      网上大多数的建议都是WSASEND采用线性模式,即建立一个发送缓冲,当上一次send完成之后,再进行下一次的投递。那么WSASEND什么情况下会出现部分发送呢?     在MSDN中IOCP的列子是对得到的发送的字节值进行

2014-04-08 17:43:11 1084

转载 解决TIME_WAIT过多问题

#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’LAST_ACK 14SYN_RECV 348ESTABLISHED 70FIN_WAIT1 229FIN_WAIT2 30CLOSING 33TIME_WAIT 18122状态:描述CLOSED:无连接是活动的或正在

2014-04-03 10:39:08 602

转载 Socket心跳包机制总结

心跳包机制   跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。    在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出

2014-03-26 17:08:40 1838 1

转载 周尚金杭

这个问题我必须答,因为我想为这里的年轻人介绍一种「可实现的成功学」。希望这个我自创的理论,可以改变很多人的一生。当我们评价一个事情值不值得去做、应该花多少精力去做的时候,应该抛弃单一的视角,而是分从两个不同的维度来看,一是该事件将给我带来的收益大小(认知、情感、物质、身体方面的收益皆可计入),即「收益值」;二是该收益随时间衰减的速度,我称为「收益半衰期」,半衰期长的事件,对我们的影响会持续

2014-03-05 14:21:03 1290

Windows核心编程第5版英文版.chm

Windows核心编程第5版英文版.chm

2012-03-31

c++高手箴言(有关WINDOWS编程)

c++高手箴言,经验总结!CHM 有关WINDOWS编程)

2008-11-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除