多线程之Event

来源:互联网 发布:linux禁止外传文件 编辑:程序博客网 时间:2024/05/19 13:58
#include <iostream>#include <process.h>#include <windows.h>long g_count = 0;long g_sum   = 0;static const int g_s_Count = 10;CRITICAL_SECTION g_csThreadParamer;CRITICAL_SECTION g_csThreadCode;HANDLE          g_threadEvent;unsigned int WINAPI ThreadFunc(void *p) {    int nThreadNum = *(int *)p;       Sleep(50);    EnterCriticalSection(&g_csThreadCode);    g_count++;    printf("线程编号: %d, 全局资源值为: %d\n", nThreadNum, g_count);    LeaveCriticalSection(&g_csThreadCode);    SetEvent(g_threadEvent);    return 0;}int main(void) {    std::cout << "Create the Thread" << std::endl;    g_threadEvent = CreateEvent(   NULL,                                FALSE,                                FALSE,                                NULL);    InitializeCriticalSection(&g_csThreadCode);    HANDLE threadHandle[g_s_Count];    for(int i = 0; i < g_s_Count; ) {        threadHandle[i] = (HANDLE)_beginthreadex(NULL,                                            0,                                            ThreadFunc,                                            &i,                                            0,                                            NULL);        WaitForSingleObject(g_threadEvent, INFINITE); //很好的实现线程同步和互斥        ++i;    }    WaitForMultipleObjects(g_s_Count, threadHandle, true, INFINITE);    for(int i = 0; i < g_s_Count; ++i) {        CloseHandle(threadHandle[i]);    }    DeleteCriticalSection(&g_csThreadCode);    std::cout << "Thread Ending" << std::endl;     return 0;}

0 0