windows编程点滴(六)之线程同步之线程局部存储
2011-09-04 20:28
330 查看
主线程为线程局部存储分配索引DWORD TlsAlloc(void);
释放 TlsFree(DWORD dwTlsIndex);
调用TlsSetValue和TlsGetValue设置和读取线程数组中的值
BOOL TlsSetValue(DWORD dwTlsIndex , LPVOID lpTlsValue)
LPVOID TlsGetValue(DWORD dwTlsIndex);
#include <windows.h>
#include <stdio.h>
#include <process.h>
DWORD g_tlsUsedTime;
void InitStartTime(){
DWORD dwStart = GetTickCount();
TlsSetValue(g_tlsUsedTime,(LPVOID)dwStart);
}
DWORD GetUsedTime(){
DWORD dwElapsed = GetTickCount();
dwElapsed = dwElapsed - (DWORD)TlsGetValue(g_tlsUsedTime);
return dwElapsed;
}
UINT WINAPI ThreadProc(LPVOID){
int i;
InitStartTime();
i = 10000 * 10000;
while (i--)
{
}
printf("ThreadId = %u\tElapsedTime = %u\n",GetCurrentThreadId(),
GetUsedTime());
return 0;
}
void InitTlsAlloc(){
g_tlsUsedTime = TlsAlloc();
}
int _cdecl main(int argc,char* argv[])
{
UINT uid;
int i;
HANDLE h[10];
InitTlsAlloc();
for(i = 0;i < 10; i++)
{
h[i] = (HANDLE)_beginthreadex(NULL,0,ThreadProc,NULL,0,&uid);
}
for (i = 0; i < 10; i++)
{
WaitForSingleObject(h[i],INFINITE);
CloseHandle(h[i]);
}
TlsFree(g_tlsUsedTime);
return 0;
}
释放 TlsFree(DWORD dwTlsIndex);
调用TlsSetValue和TlsGetValue设置和读取线程数组中的值
BOOL TlsSetValue(DWORD dwTlsIndex , LPVOID lpTlsValue)
LPVOID TlsGetValue(DWORD dwTlsIndex);
#include <windows.h>
#include <stdio.h>
#include <process.h>
DWORD g_tlsUsedTime;
void InitStartTime(){
DWORD dwStart = GetTickCount();
TlsSetValue(g_tlsUsedTime,(LPVOID)dwStart);
}
DWORD GetUsedTime(){
DWORD dwElapsed = GetTickCount();
dwElapsed = dwElapsed - (DWORD)TlsGetValue(g_tlsUsedTime);
return dwElapsed;
}
UINT WINAPI ThreadProc(LPVOID){
int i;
InitStartTime();
i = 10000 * 10000;
while (i--)
{
}
printf("ThreadId = %u\tElapsedTime = %u\n",GetCurrentThreadId(),
GetUsedTime());
return 0;
}
void InitTlsAlloc(){
g_tlsUsedTime = TlsAlloc();
}
int _cdecl main(int argc,char* argv[])
{
UINT uid;
int i;
HANDLE h[10];
InitTlsAlloc();
for(i = 0;i < 10; i++)
{
h[i] = (HANDLE)_beginthreadex(NULL,0,ThreadProc,NULL,0,&uid);
}
for (i = 0; i < 10; i++)
{
WaitForSingleObject(h[i],INFINITE);
CloseHandle(h[i]);
}
TlsFree(g_tlsUsedTime);
return 0;
}
相关文章推荐
- Windows编程-- 线程和内核对象的同步 - 互斥对象内核对象
- windows多线程编程--线程与同步对象CSemaphore,CMutex,CCriticalSection,CEvent简述(2007-07-15 11:07)
- 基于visual c++之windows核心编程代码分析(12)使用信号量同步线程
- 基于visual c++之windows核心编程代码分析(14)使用Event同步线程
- Windows编程--线程和内核对象的同步-事件内核对象
- Windows编程--线程和内核对象的同步-等待定时器内核对象
- 基于visual c++之windows核心编程代码分析(15)使用Mutex同步线程
- Windows编程--线程和内核对象的同步-信标(信号量)内核对象
- Windows编程那些事----线程与内核对象同步之【信标对象】
- Windows高级编程之线程与内核对象的同步
- Windows编程基础 第十四章 进程 作业 线程 线程局部存储
- Windows编程-- 用户方式中线程的同步---原子访问:互锁的函数家族
- Windows编程-- 用户方式中线程的同步---关键代码段(临界区)
- 多线程编程之四——线程的同步
- MFC多线程编程之四——线程的同步
- (好~)windows下的线程进程同步方法
- Windows编程--线程之GetExitCodeThread()
- 多线程编程之Windows同步方式
- windows编程之线程操作
- windows编程 -线程,事件