自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 Windows平台利用Interlocked系列api实现读写锁

Windows在Vista 和 Server2008以后才开始提供读写锁API,即SRW系列函数(InitializeSRWLock,AcquireSRWLockShared,AcquireSRWLockExclusive等)。网上也有很多读写锁实现,基本上都是用互斥量对象和信号量对象实现。但是对于读写锁这种特殊的锁(锁住时间短)自旋的方式等待应该更合适,用Interlocked系列函数实现读写...

2019-08-12 20:12:32 385

转载 深入解析结构化异常处理(SEH)

1997年文章,Windows技术的根一直没变: http://www.microsoft.com/msj/0197/exception/exception.aspxMatt Pietrek 著  董岩 译在Win32操作系统提供的所有功能中,使用最广泛而又没有公开的恐怕要数结构化异常处理(Structured Exception Handling,SEH) 了。当

2016-08-08 16:11:51 1195 2

原创 IOCP客户端版本,异步connect

之前在网上看到一个服务端的IOCP模块,比较小巧,感觉还不错,后来在工作中,需要开发一个挂号的程序,监视大量服务器运行情况,初期连接数大概六七百,我就把这个IOCP模块改造成了一个客户端版本。后来发现由于是同步的connect,有时候会卡在connect过程很久,也不方便设置connect的超时,想到使用ConnectEx做异步连接,感觉ConnectEx过于繁琐,还得自己获取函数指针,必须要先调...

2014-06-11 12:41:36 5225 9

原创 LeaveCriticalSection有BUG?

偶然发现Windows API函数LeaveCriticalSection存在一个BUG

2014-05-06 16:25:26 1886

原创 自己实现IDispatch::Invoke方法

因为种种原因,在只能得到一个IWebBrowser指针的情况下要接收javascript的window.external.XXX调用,不得已自己实现了IDocHostUIHandler和IDispatch,为了使用方便,自己又需要实现类似MFC的DISPATCH_MAP:首先用一个结构体保存每个DISPATCH方法的ID,名字,this指针,函数地址,返回值类型,参数类型...

2012-08-04 00:07:06 3801 1

原创 用GDI+播放GIF的问题

用GDI+播放GIF的方法网上很多,其实都是一版本,但其实其中有好几个问题,也没有看到有人发现和说明。原版关键代码:Graphics gh(hDC); //hDC是外部传入的画图DCgh.DrawImage(image,0,0,image->GetWidth(),image->GetHeight());//重新设置当前的活动数据帧image->SelectActiveFrame(

2010-08-07 21:55:00 1059

原创 BCB动态库和OCX里面CM_MOUSELEAVE和CM_MOUSEENTER消息的实现

由于改造封装一个BCB的OCX,在MFC里面调用,导致原来许多使用的CM_MOUSELEAVE和CM_MOUSEENTER消息失效,这两个消息是VCL的自定义消息,依赖于VCL的消息循环,源于TApplication.DoMouseIdle方法,而该方法由TApplication.Idle调用,Idle是TApplication.HandleMessage的消息处理循环的一部分。最终H

2010-06-18 09:59:00 1242 1

原创 WM_GETDLGCODE死循环问题

      最近把原来的一个BCB工程改造成BCB的ActiveX控件,提供给MFC调用,原以为一切很顺利,没想到出现了很多意料之外的问题。      首先是BCB的线程同步方法Synchronize不起作用了,后来知道了是由于TApplication::Handle没有值导致的,查找了它的实现原理,需要在程序收到WM_NULL消息时调用CheckSynchronize()方法,我在Act

2010-05-20 21:04:00 3016 1

原创 BHO

     因为同学新公司的变态要求,禁用IE右键菜单,开始我建议直接用JS实现,同学说不能修改页面源码,估计页面是其他公司的,只好用BHO实现。由于BHO会对所有页面生效,只好在BHO里判断指定页面生效(很变态^_^)。     言归正传,直接创建ATL工程TestBHO,添加类TestBHOCtrl,     class ATL_NO_VTABLE CTestBHOCtrl :       

2010-05-19 23:29:00 1457

原创 开篇

      写下开篇作为对自己的鞭策。

2010-05-18 19:50:00 382

空空如也

空空如也

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

TA关注的人

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