zoukankan      html  css  js  c++  java
  • windows编程点滴(六)之线程同步之线程局部存储

    主线程为线程局部存储分配索引DWORD TlsAlloc(void);

    释放 TlsFree(DWORD dwTlsIndex);

    调用TlsSetValueTlsGetValue设置和读取线程数组中的值

    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;

    }

  • 相关阅读:
    抽象工厂模式
    python 工厂方法
    采用__call__ 实现装饰器模式
    策略模式
    采集15个代理IP网站,打造免费代理IP池
    grid网格布局——色子布局
    观察者模式
    搭建免费代理池---采集代理(1)
    python 爬虫 user-agent 生成
    多进程 + 多线程抓取博客园信息
  • 原文地址:https://www.cnblogs.com/cody1988/p/2166681.html
Copyright © 2011-2022 走看看