原创 Mutex — Windows API

Mutex是互斥體的意思,當一個線程持有一個Mutex時,其它線程申請持有同一個Mutex會被阻塞,因此可以通過Mutex來保證對某一資源的互斥訪問(即同一時間最多隻有一個線程訪問)。調用CreateMutex可以創建或打開一個Mutex

原创 Event — Windows API

Event即事件是一種用於進行線程/進程間同步的對象,事件有置位和復位兩種狀態,當線程通過waiting functions等待Event對象置位時該線程將進入阻塞狀態,當該Event對象被置位或等待超時後,等待的線程將恢復執行。Even

原创 C++ 通過Thunk在WNDPROC中訪問this指針

本文基本只討論原理,具體實現請參見後續文章《C++ 通過Thunk在WNDPROC中訪問this指針實現細節》 當註冊窗口類時,WNDCLASSEX結構的lpfnWndProc成員應設置爲窗口過程函數的地址,這是一個C風格的函數指針,所以

原创 C++11 可變參數模板

在C++11之前, 有兩個典型的受制於模板功能不強而導致代碼重複難看的問題, 那就 function object 和 tuple。 拿 function objects 來說, 需要一個返回類型參數及N個參數類型參數。 但因爲變長參數模

原创 Unicode 字符集及UTF-8 UTF-16編碼

很久以前發在他處的一篇博文,今天翻出來重新整理了一下   Unicode 字符集 共分爲 17 個平面(plane), 分別對應 U+xx0000 - U+xxFFFF 的 code points, 其中 xx := 00 - 10。其中

原创 OpenGL ES 之 EGL

眼下針對移動設備的應用開發依然如火如荼,而遊戲開發幾乎能佔到半壁江山,而OpenGL ES也趁着這個東風大紅大紫。To be honest,我並不是什麼OpenGL的鐵粉,OpenGL那種狀態機(state machine)式的API風格

原创 Semaphore — Windows API

Semaphore是旗語的意思,在Windows中,Semaphore對象用來控制對資源的併發訪問數。Semaphore對象具有一個計數值,當值大於0時,Semaphore被置信號,當計數值等於0時,Semaphore被清除信號。每次針對

原创 C++ 通過Thunk在WNDPROC中訪問this指針實現細節

本文代碼使用了一些C++11特性,需要編譯器支持。本文僅討論x86_64平臺的相關實現,x86平臺理論上只需修改 thunk 相關機器碼即可。 THUNK的原理參見之前的一篇博文《C++ 通過Thunk在WNDPROC中訪問this指針》

原创 C++ 匿名名字空間及靜態非成員函數

在C++中,static有一個感覺被較少提及的用法:修飾非成員函數,這個用法實際是從C語言繼承來的。其作用是表明這個函數只在當前編譯單元中有效。這就使這個函數的所有引用在編譯時就可以全部確定,無需進入鏈接階段,鏈接器沒有機會看到這個函數相