- 博客(10)
- 收藏
- 关注
原创 Windows平台利用Interlocked系列api实现读写锁
Windows在Vista 和 Server2008以后才开始提供读写锁API,即SRW系列函数(InitializeSRWLock,AcquireSRWLockShared,AcquireSRWLockExclusive等)。网上也有很多读写锁实现,基本上都是用互斥量对象和信号量对象实现。但是对于读写锁这种特殊的锁(锁住时间短)自旋的方式等待应该更合适,用Interlocked系列函数实现读写...
2019-08-12 20:12:32
427
转载 深入解析结构化异常处理(SEH)
1997年文章,Windows技术的根一直没变: http://www.microsoft.com/msj/0197/exception/exception.aspxMatt Pietrek 著 董岩 译在Win32操作系统提供的所有功能中,使用最广泛而又没有公开的恐怕要数结构化异常处理(Structured Exception Handling,SEH) 了。当
2016-08-08 16:11:51
1267
原创 IOCP客户端版本,异步connect
之前在网上看到一个服务端的IOCP模块,比较小巧,感觉还不错,后来在工作中,需要开发一个挂号的程序,监视大量服务器运行情况,初期连接数大概六七百,我就把这个IOCP模块改造成了一个客户端版本。后来发现由于是同步的connect,有时候会卡在connect过程很久,也不方便设置connect的超时,想到使用ConnectEx做异步连接,感觉ConnectEx过于繁琐,还得自己获取函数指针,必须要先调...
2014-06-11 12:41:36
5309
5
原创 自己实现IDispatch::Invoke方法
因为种种原因,在只能得到一个IWebBrowser指针的情况下要接收javascript的window.external.XXX调用,不得已自己实现了IDocHostUIHandler和IDispatch,为了使用方便,自己又需要实现类似MFC的DISPATCH_MAP:首先用一个结构体保存每个DISPATCH方法的ID,名字,this指针,函数地址,返回值类型,参数类型...
2012-08-04 00:07:06
3872
原创 用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
1088
原创 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
1259
1
原创 WM_GETDLGCODE死循环问题
最近把原来的一个BCB工程改造成BCB的ActiveX控件,提供给MFC调用,原以为一切很顺利,没想到出现了很多意料之外的问题。 首先是BCB的线程同步方法Synchronize不起作用了,后来知道了是由于TApplication::Handle没有值导致的,查找了它的实现原理,需要在程序收到WM_NULL消息时调用CheckSynchronize()方法,我在Act
2010-05-20 21:04:00
3048
原创 BHO
因为同学新公司的变态要求,禁用IE右键菜单,开始我建议直接用JS实现,同学说不能修改页面源码,估计页面是其他公司的,只好用BHO实现。由于BHO会对所有页面生效,只好在BHO里判断指定页面生效(很变态^_^)。 言归正传,直接创建ATL工程TestBHO,添加类TestBHOCtrl, class ATL_NO_VTABLE CTestBHOCtrl :
2010-05-19 23:29:00
1482
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人