亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rvmutex.h

?? 基于h323協議的軟phone
?? H
字號:
/***********************************************************************
Filename   : rvmutex.h
Description: rvmutex header file
************************************************************************
      Copyright (c) 2001,2002 RADVISION Inc. and RADVISION Ltd.
************************************************************************
NOTICE:
This document contains information that is confidential and proprietary
to RADVISION Inc. and RADVISION Ltd.. No part of this document may be
reproduced in any form whatsoever without written prior approval by
RADVISION Inc. or RADVISION Ltd..

RADVISION Inc. and RADVISION Ltd. reserve the right to revise this
publication and make changes without obligation to notify any person of
such revisions or changes.
***********************************************************************/
/*$
{package:
	{name: Mutex}
	{superpackage: CCore}
	{include: rvmutex.h}
	{description:	
		{p: This module provides recursive locking functions to use specifically
			for locking code sections.}
	}
}
$*/
#ifndef RV_MUTEX_H
#define RV_MUTEX_H

#include "rvccore.h"

#if !defined(RV_MUTEX_TYPE) || ((RV_MUTEX_TYPE != RV_MUTEX_SOLARIS) && \
    (RV_MUTEX_TYPE != RV_MUTEX_LINUX) && (RV_MUTEX_TYPE != RV_MUTEX_VXWORKS) && \
    (RV_MUTEX_TYPE != RV_MUTEX_PSOS) && (RV_MUTEX_TYPE != RV_MUTEX_WIN32_MUTEX) && \
    (RV_MUTEX_TYPE != RV_MUTEX_WIN32_CRITICAL) && (RV_MUTEX_TYPE != RV_MUTEX_MANUAL) && \
    (RV_MUTEX_TYPE != RV_MUTEX_NONE))
#error RV_MUTEX_TYPE not set properly
#endif

#if !defined(RV_MUTEX_ATTRIBUTE_DEFAULT)
#error RV_MUTEX_ATTRIBUTE_DEFAULT not set properly
#endif

/*$
{type:
	{name: RvMutex}
	{superpackage: Mutex}
	{include: rvmutex.h}
	{description:	
		{p: A recursive mutex object.}
	}
}
$*/
/*$
{type:
	{name: RvMutexAttr}
	{superpackage: Mutex}
	{include: rvlock.h}
	{description:	
		{p: OS specific attributes and options used for mutexes. See definitions in rvmutex.h
			along with the default values in rvccoreconfig.h for more information.}
	}
}
$*/
/* Get include files and define RvMutex and RvMutexAttr for each OS */
#if (RV_MUTEX_TYPE == RV_MUTEX_SOLARIS) || (RV_MUTEX_TYPE == RV_MUTEX_LINUX)
/* They're both posix, but they're not exactly the same, so we need 2 settings */
#include <pthread.h>
typedef pthread_mutex_t RvMutex;
typedef struct {
	/* These correspond to attributes in the pthread_mutexattr struct that we let users set */
	int pshared;  /* used only by Solaris */
	int protocol; /* used only by Solaris */
} RvMutexAttr;
#endif
#if (RV_MUTEX_TYPE == RV_MUTEX_VXWORKS)
#include <vxworks.h>
#include <semLib.h>
typedef SEM_ID RvMutex;
typedef int RvMutexAttr;  /* options to semMCreate */
#endif
#if (RV_MUTEX_TYPE == RV_MUTEX_PSOS)
#include <psos.h>
typedef unsigned long RvMutex;
typedef unsigned long RvMutexAttr; /* flags to mu_create (Don't set RECURSIVE/NORECURSIVE) */
#endif
#if (RV_MUTEX_TYPE == RV_MUTEX_WIN32_MUTEX)
#include <windows.h>
typedef HANDLE RvMutex;
typedef int RvMutexAttr; /* not used */
#endif
#if (RV_MUTEX_TYPE == RV_MUTEX_WIN32_CRITICAL)
#include <windows.h>
typedef CRITICAL_SECTION RvMutex;
typedef DWORD RvMutexAttr; /* spin count (use only on Win2000 and newer) */
#endif
#if (RV_MUTEX_TYPE == RV_MUTEX_MANUAL)
#include "rvsemaphore.h"
#include "rvthread.h"

typedef struct {
	RvSemaphore handle;
	RvSemaphore lock;
	RvThreadId owner;
	RvUint32 count;
	RvUint32 waiters;
} RvMutex;
typedef int RvMutexAttr; /* not used, any semaphore attributes will apply */
#endif
#if (RV_MUTEX_TYPE == RV_MUTEX_NONE)
typedef RvInt RvMutex;     /* Dummy types, used to prevent warnings. */
typedef RvInt RvMutexAttr; /* not used */
#endif

#if defined(__cplusplus)
extern "C" {
#endif 

/* Prototypes: See documentation blocks below for details. */
RvStatus RvMutexInit(void);
RvStatus RvMutexEnd(void);
#if (RV_MUTEX_TYPE != RV_MUTEX_NONE)
RVCOREAPI
RvStatus RVCALLCONV RvMutexConstruct(RvMutex *mu);
RVCOREAPI
RvStatus RVCALLCONV RvMutexDestruct(RvMutex *mu);
RVCOREAPI
RvStatus RVCALLCONV RvMutexLock(RvMutex *mu);
RVCOREAPI
RvStatus RVCALLCONV RvMutexUnlock(RvMutex *mu);
RvStatus RvMutexSetAttr(RvMutexAttr *attr);
#else
/* If none is set then none of these functions do anything */
#define RvMutexConstruct(_m) (*(_m) = RV_OK)
#define RvMutexDestruct(_m) (*(_m) = RV_OK)
#define RvMutexLock(_m) (*(_m) = RV_OK)
#define RvMutexUnlock(_m) (*(_m) = RV_OK)
#define RvMutexSetAttr(_m) (*(_m) = RV_OK)
#endif

#if defined(RV_TEST_CODE)
void RvMutexTest(void);
#endif /* RV_TEST_CODE */

#if defined(__cplusplus)
}
#endif 

/* Function Documentation */
/*$
{function scope="protected":
	{name: RvMutexInit}
	{superpackage: Mutex}
	{include: rvmutex.h}
	{description:
		{p: Initializes the Mutex module. Must be called once (and
			only once) before any other functions in the module are called.}
	}
	{proto: RvStatus RvMutexInit(void);}
	{returns: RV_OK if successful otherwise an error code.}
}
$*/
/*$
{function scope="protected":
	{name: RvMutexEnd}
	{superpackage: Mutex}
	{include: rvmutex.h}
	{description:
		{p: Shuts down the Mutex module. Must be called once (and
			only once) when no further calls to this module will be made.}
	}
	{proto: RvStatus RvMutexEnd(void);}
	{returns: RV_OK if successful otherwise an error code.}
}
$*/
/*$
{function:
	{name: RvMutexConstruct}
	{superpackage: Mutex}
	{include: rvmutex.h}
	{description:
		{p: Creates a recursive mutex object.}
	}
	{proto: RvStatus RvMutexConstruct(RvLock *mu);}
	{params:
		{param: {n: mu}  {d: Pointer to mutex object to be constructed.}}
	}
	{returns: RV_OK if successful otherwise an error code.}
}
$*/
/*$
{function:
	{name: RvMutexDestruct}
	{superpackage: Mutex}
	{include: rvmutex.h}
	{description:
		{p: Destroys a recursive mutex object.}
	}
	{proto: RvStatus RvMutexDestruct(RvMutex *mu);}
	{params:
		{param: {n: mu}  {d: Pointer to recursive mutex object to be destructed.}}
	}
	{returns: RV_OK if successful otherwise an error code.}
	{notes:
		{note: Never destroy a mutex object which has a thread suspended on it.}
	}
}
$*/
/*$
{function:
	{name: RvMutexLock}
	{superpackage: Mutex}
	{include: rvmutex.h}
	{description:
		{p: Aquires a recursive muctex. Will suspend the calling task until the mutex is available.}
	}
	{proto: RvStatus RvMutexLock(RvMutex *mu);}
	{params:
		{param: {n: mu}  {d: Pointer to mutex object to be aquired.}}
	}
	{returns: RV_OK if successful otherwise an error code.}
}
$*/
/*$
{function:
	{name: RvMutexUnlock}
	{superpackage: Mutex}
	{include: rvmutex.h}
	{description:
		{p: Unlocks a recursive mutex.}
	}
	{proto: RvStatus RvMutexUnlock(RvMutex *mu);}
	{params:
		{param: {n: mu}  {d: Pointer to mutex object to be unlocked.}}
	}
	{returns: RV_OK if successful otherwise an error code.}
}
$*/
/*$
{function:
	{name: RvMutexSetAttr}
	{superpackage: Mutex}
	{include: rvmutex.h}
	{description:
		{p: Sets the options and attributes to be used when creating and using mutex objects.}
	}
	{proto: RvStatus RvMutexSetAttr(RvLockAttr *attr);}
	{params:
		{param: {n: attr}  {d: Pointer to OS speicific mutex attributes to begin using.}}
	}
	{returns: RV_OK if successful otherwise an error code.}
	{notes:
		{note: Non-reentrant function. Do not call when other threads may be calling rvmutex functions.}
		{note: These attributes are global and will effect all mutex functions called thereafter.}
		{note: The default values for these attributes are set in rvccoreconfig.h.}
	}
}
$*/

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
爽爽淫人综合网网站| 色婷婷av一区| 久久蜜桃一区二区| 久久99精品久久久久婷婷| 在线综合亚洲欧美在线视频| 亚洲一区二区av电影| 91福利社在线观看| 亚洲午夜精品久久久久久久久| 91久久人澡人人添人人爽欧美| 亚洲欧美自拍偷拍色图| 97精品久久久久中文字幕 | 国产精品理伦片| 99视频超级精品| 亚洲午夜久久久久久久久电影网| 69精品人人人人| 韩国精品主播一区二区在线观看| 久久蜜桃一区二区| 91亚洲男人天堂| 丝袜美腿一区二区三区| 日韩免费一区二区三区在线播放| 国产伦精品一区二区三区在线观看| 国产精品色一区二区三区| 91蝌蚪国产九色| 日本欧美大码aⅴ在线播放| 久久综合狠狠综合久久激情| 成人午夜免费视频| 亚洲精品精品亚洲| 日韩精品一区二区三区在线观看| 国产精品亚洲一区二区三区妖精| 一区二区在线观看免费| 日韩一级大片在线| 99re成人在线| 麻豆91在线播放| 亚洲欧美一区二区不卡| 日韩精品一区二区三区中文精品| www.av精品| 久久99精品久久久久久| 中文字幕日韩av资源站| 91精品国产一区二区人妖| 不卡的看片网站| 蜜桃视频第一区免费观看| 成人欧美一区二区三区黑人麻豆| 91麻豆精品国产91久久久更新时间| 床上的激情91.| 免费日本视频一区| 精品日韩欧美一区二区| 99热精品国产| 国产又粗又猛又爽又黄91精品| 国产精品久久久久久久浪潮网站 | 免费成人美女在线观看| 国产精品久久久久久久久快鸭 | 久久99国产精品麻豆| 国产精品美女久久久久aⅴ国产馆| 欧美精品成人一区二区三区四区| 国产自产高清不卡| 欧美aaaaa成人免费观看视频| 国产欧美一区视频| 欧美一激情一区二区三区| 成人精品视频.| 婷婷久久综合九色国产成人 | 日韩—二三区免费观看av| 久久毛片高清国产| 欧美一区二区在线视频| 成人福利在线看| 免费观看久久久4p| 亚洲乱码国产乱码精品精可以看| 欧美一区二区三区四区五区| 成人黄色软件下载| 蜜桃av噜噜一区| 国产嫩草影院久久久久| 91.com在线观看| 91蜜桃在线观看| 国产乱码精品一区二区三区av| 亚洲另类一区二区| 精品av久久707| 欧美婷婷六月丁香综合色| 丁香婷婷综合色啪| 亚洲一区二区三区爽爽爽爽爽| 国产喷白浆一区二区三区| 日韩欧美电影在线| 91麻豆国产精品久久| 成人av网址在线| 国产精品羞羞答答xxdd| 免费成人美女在线观看.| 亚洲自拍偷拍网站| 亚洲色图.com| 亚洲国产成人私人影院tom| 欧美tickling网站挠脚心| 欧美精品1区2区3区| 色噜噜夜夜夜综合网| 成人综合婷婷国产精品久久蜜臀| 国产在线播放一区三区四| 国精产品一区一区三区mba视频 | 一区二区理论电影在线观看| 中文字幕免费观看一区| 久久久综合九色合综国产精品| 91精品国产全国免费观看| 欧美三电影在线| 在线观看一区日韩| 色偷偷88欧美精品久久久| 91在线porny国产在线看| 成人免费看片app下载| 高清成人免费视频| 成人手机在线视频| 国产成人欧美日韩在线电影| 成人网在线播放| 成人黄色在线看| 在线亚洲精品福利网址导航| 91电影在线观看| 欧美男同性恋视频网站| 91精品久久久久久久久99蜜臂| 日韩一级黄色大片| 精品福利在线导航| 亚洲色欲色欲www在线观看| 一区二区三区四区不卡在线| 日韩电影在线观看一区| 美女视频黄a大片欧美| 成人免费视频app| 91日韩一区二区三区| 日韩女优制服丝袜电影| 久久久欧美精品sm网站| 一区二区三区精品视频| 午夜精品久久久久久久蜜桃app | 九九视频精品免费| 99国内精品久久| 欧美性一二三区| 国产午夜亚洲精品午夜鲁丝片| 日韩一级成人av| 亚洲欧美自拍偷拍色图| 一级做a爱片久久| 国产精品一级片| 91色在线porny| 国产午夜亚洲精品理论片色戒| 亚洲一区在线看| 国产精品亚洲一区二区三区在线| 欧洲另类一二三四区| 精品欧美一区二区三区精品久久| 亚洲欧美日本韩国| 麻豆精品一区二区av白丝在线| 99久久免费精品| 91精品国产黑色紧身裤美女| 久久精品视频免费| 亚洲自拍偷拍麻豆| 国产一区二区三区高清播放| 色噜噜久久综合| 久久精品亚洲麻豆av一区二区| 一区二区三区av电影| 久久国产精品一区二区| 精品视频在线免费| 国产欧美一区二区精品性色 | 26uuu亚洲综合色欧美| 亚洲一区二区三区四区在线| 国产福利视频一区二区三区| 91精品国产综合久久福利软件 | 国产精品美日韩| 免费看黄色91| 欧美精品亚洲二区| 国产精品久久午夜| 成人激情动漫在线观看| 91精品国产一区二区三区| 亚洲18女电影在线观看| 成人免费av网站| 日韩美女在线视频 | 亚洲一区二区三区四区的| 久久爱www久久做| 日韩欧美一二三区| 亚洲午夜在线电影| 99亚偷拍自图区亚洲| 精品国产凹凸成av人导航| 香蕉加勒比综合久久| 成人av电影在线网| 国产精品久久夜| 国产成人午夜99999| 日韩女优电影在线观看| 午夜久久久影院| 91污在线观看| 久久久久久久久久久久久久久99 | 国产老女人精品毛片久久| 欧美片在线播放| 一级日本不卡的影视| 成人黄色片在线观看| 国产欧美日韩中文久久| 成人免费看黄yyy456| 国产欧美日韩卡一| 国产精品自产自拍| 日韩一区二区三区免费看 | 国产真实精品久久二三区| 欧美美女直播网站| 日韩和欧美一区二区| 欧美精品一二三区| 日本不卡高清视频| 欧美日韩成人综合| 亚洲a一区二区| 欧美午夜精品免费| 日韩国产欧美在线播放| 欧美肥妇毛茸茸| 麻豆成人av在线| 欧美一级在线免费| 国产乱国产乱300精品| 日韩三级视频在线看|