mutex 与 WaitForSingleObject
来源:互联网 发布:杜汶泽现状2017 知乎 编辑:程序博客网 时间:2024/05/18 07:52
WaitForSingleObject的函数原型为:
WINBASEAPIDWORDWINAPIWaitForSingleObject( __in HANDLE hHandle, __in DWORD dwMilliseconds );
参数说明:
hHandle: 对象句柄。可以指定一系列的对象,如Event、Job、Memory resource notification、Mutex、Process、Semaphore、Thread、Waitable timer等。
dwMilliseconds: 定时时间间隔,单位为milliseconds(毫秒).如果指定一个非零值,函数处于等待状态直到hHandle标记的对象被触发,或者时间到了。如果dwMilliseconds为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。如果dwMilliseconds为INFINITE,对象被触发信号后,函数才会返回。
本文主要介绍mutex对象。
HANDLE hMutex; hMutex = CreateMutex(NULL, FALSE, NULL);
CreateMutex()函数的第二个参数是FALSE,表示刚刚创建的这个Mutex不属于任何线程,也就是没有任何线程拥有他,一个Mutex在没有任何线程拥有他的时候,他是处于激发态的,所以处于有信号状态。调用ReleaseMutex()是把互斥量变为有信号。
下面是一个实例:
// winthread.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <Windows.h>#include <iostream>using namespace std;#define THREAD_INSTANCE_NUMBER 3LONG g_fResourceInUse = FALSE;LONG g_lCounter = 0;DWORD ThreadProc(void *pData){int ThreadNumberTemp = (*(int*)pData);HANDLE hMutex;if ((hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Mutex.Test")) == NULL ){cout << "Open Mutex error!" << endl;}WaitForSingleObject(hMutex, INFINITE);cout << "ThreadProc: " << ThreadNumberTemp << " is running!" << endl;cout << "ThreadProc: " << ThreadNumberTemp << " gets the mutex" << endl;ReleaseMutex(hMutex);CloseHandle(hMutex);return 0;}int _tmain(int argc, _TCHAR* argv[]){int i;DWORD ID[THREAD_INSTANCE_NUMBER];HANDLE h[THREAD_INSTANCE_NUMBER];HANDLE hMutex;if ( (hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Mutex.Test")) == NULL ){if ( (hMutex = CreateMutex(NULL, FALSE, "Mutex.Test")) == NULL ){cout << "Create Mutex error!" << endl;return 0;}}for (i = 0; i < THREAD_INSTANCE_NUMBER; i++){WaitForSingleObject(hMutex, INFINITE);h[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, (void *)&ID[i], 0, &(ID[i]));if (h[i] == NULL)cout << "CreateThread error" << ID[i] << " " << i << endl;elsecout << "CreateThread: " << ID[i] << " " << i << endl;ReleaseMutex(hMutex);}WaitForMultipleObjects(THREAD_INSTANCE_NUMBER, h, TRUE, INFINITE);cout << "Close the Mutex Handle!" << endl;CloseHandle(hMutex);system("pause");return 0;}
其中的一个运行结果如下:- mutex 与 WaitForSingleObject
- WaitForSingleObject 与 线程
- SetEvent、PulseEvent与WaitForSingleObject
- WaitForSingleObject与waitForMultipleObjects
- _beginthreadex与WaitForSingleObject
- 多线程WaitForSingleObject () 与互斥量时
- WaitForSingleObject()与WaitForMultipleObjects()
- 为什么Mutex,Event,Thread句柄都是可以waitforsingleobject?
- WaitForSingleObject等待一个mutex句柄时的返回值
- WaitForSingleObject 与 EnterCriticalSection 性能比较
- WaitForSingleObject 与 EnterCriticalSection 性能比较
- CreateThread 与 WaitForSingleObject 的应用
- WaitForSingleObject与WaitForMultipleObjects用法详解
- WaitForSingleObject与WaitForMultipleObjects用法详解
- WaitForSingleObject
- WaitForSingleObject
- WaitForSingleObject
- WaitForSingleObject
- shell 中的循环
- Android 将Button设置为圆角
- 程序员技术练级攻略
- 阿里巴巴2014校园招聘笔试题(成都站,软件研发岗)——2014.09.22
- scanf使用细节
- mutex 与 WaitForSingleObject
- 化简叠词
- C++友元函数的介绍
- new 对象详细过程
- C程序设计语言--缓冲、常见的问题和全局变量
- 36.自己写的一个开源连接池功能
- UVa 11256 Repetitive Multiple
- 【数据结构】之队列的java实现(一)
- 我是怎么招聘程序员的