码迷,mamicode.com
首页 > 其他好文 > 详细

CriticalSection 临界区

时间:2017-01-16 22:27:02      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:while   multiple   oid   getch   array   std   window   har   init   

// 临界区.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<windows.h>
#include<iostream>
using namespace std;

DWORD g_cnt1;
DWORD g_cnt2;
BOOL g_bContinue = TRUE;
CRITICAL_SECTION cs;

DWORD WINAPI ThreadProc(__in LPVOID lpParameter)
{
::EnterCriticalSection(&cs);
while (g_bContinue)
{
g_cnt1++;
g_cnt2++;
printf("g_cnt1=%d\n", g_cnt1);
printf("g_cnt2=%d\n", g_cnt2);
}
::LeaveCriticalSection(&cs);
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread[2];
g_cnt1 = g_cnt2 = 0;
::InitializeCriticalSection(&cs);

hThread[0] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
hThread[1] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);

Sleep(100);
g_bContinue = FALSE;
::WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
printf("g_cnt1=%d\n", g_cnt1);
printf("g_cnt2=%d\n", g_cnt2);

::DeleteCriticalSection(&cs);

::CloseHandle(hThread[0]);
::CloseHandle(hThread[1]);
getchar();
return 0;
}


/*函数原型:DWORD WaitForMultipleObjects(

DWORDnCount, // number of handles in array

CONST HANDLE*lpHandles, // object-handle array

BOOLbWaitAll, // wait option

DWORDdwMilliseconds// time-out interval

);WaitForMultipleObjects函数用于等待多个内核对象,
前两个参数分别为要等待的内核对象的个数和句柄数组指针。
如果将第三个参数bWaitAll的值设为TRUE,等待的内核对象全部变成受信状态以后此函数才返回。
否则,bWaitAll为0的话,只要等待的内核对象中有一个变成了受信状态,
WaitForMultipleObjects就返回,返回值指明了是哪一个内核对象变成了受信状态*/

CriticalSection 临界区

标签:while   multiple   oid   getch   array   std   window   har   init   

原文地址:http://www.cnblogs.com/lsh123/p/6291154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!