win32多线程程序设计(四)--- 读写锁
摘要:原理: 读读相容,读写互斥,写写互斥。 在第一读线程获取数据锁,在完成读的最后一个线程释放数据锁,由于获取和释放可能在不同线程,需要使用事件或信号量。用delphi写了一个简单的读写锁TReadWriteLock = class(TObject)private FReadCount: Integer; FReadCountLock: TCriticalSection; FDataLock: THandle;public constructor Create; destructor Destroy; override; function AcquireReadLock: Boolean; fun
阅读全文
posted @
2011-11-15 20:38
Cabic
阅读(526)
推荐(0)
string和WideString内部结构
摘要:String 内存结构: 引用数目|长度|字符串#0string的前面(8个字节)保存一个StrRec结构 StrRec = packed record refCnt: Longint; // 引用计数 length: Longint; // 长度end;function _LStrLen(const s: AnsiString): Longint;beginResult := 0;if Pointer(s) <> nil then Result := PStrRec(Integer(s) - sizeof(StrRec)).length;end;WideString内存结构: 长
阅读全文
posted @
2011-11-12 12:00
Cabic
阅读(192)
推荐(0)
Hook和窗口过程
摘要:设置系统级的钩子: hHook:= SetWindowsHookEx(idHook, NewWndProc, hInstance, threadId) UnhookWindowsHookEx(hHook) //里面要调用CallNextHookEx functionNewWndProc(nCode: Integer; wParam, lParam: Integer): LRESULT; stdcall;设置某个窗口的钩子: OldProc := Setwindowlong(hwnd,GWL_WNDPROC, NewProc);Setwindowlong(hwnd,GWL_WNDPROC,Old
阅读全文
posted @
2011-11-09 18:09
Cabic
阅读(675)
推荐(0)
Finalize用法
摘要:Finalize作用:把字符串,接口赋值为空时机:1. 动态分配的变量2. 不是使用Dispose 释放(例如使用 FreeMem,而Dispose内部会调用Finalize)
阅读全文
posted @
2011-11-02 17:04
Cabic
阅读(180)
推荐(0)