線程局部存儲是一個使用很方便的存儲線程局部數據的系統。利用TLS機制可以爲進程中所有的線程關聯若干數據,各個線程通過由TLS分配的全部索引來訪問與自己關聯的數據。這樣,每個線程都可以有線程局部的靜態存儲數據。
動態使用TLS的典型步驟如下:
(1)主線程調用TlsAlloc函數爲線程局部存儲分配索引,函數原形爲:
DWORD TlsAlloc( void );//返回一個TLS索引
TlsAlloc()返回的是數組成員的下標,初始狀態下,數組成員都是FREE狀態,TlsAlloc()會區找FREE狀態的數組成員,然後把它改爲INUSE,TLS返回該數組的索引。如果沒有找到FREE,就返回TLS_OUT_INDEXES。
(2)每個線程調用TlsSetValue和TlsGetValue設置或讀取線程數組中的值,函數原形爲:
BOOL TlsSetValue(DWORD dwTlsIndex, //TLS索引
LPVOID lpTlsValue //要設置的值
);
LPVOID TlsGetValue(DWORD dwTlsIndex); //TLS索引
(3)主線程調用TlsFree釋放局部存儲索引。
GetTickCount函數是獲取Windows從啓動開始經過的時間,其返回值是以毫秒位單位的已啓動的時間。