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

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

?? sdl_syssem.c

?? 視頻音頻編碼程序 視頻音頻編碼程序 視頻音頻編碼程序
?? C
字號:
/*
    SDL - Simple DirectMedia Layer
    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    Sam Lantinga
    slouken@libsdl.org
*/

#ifdef SAVE_RCSID
static char rcsid =
 "@(#) $Id: SDL_syssem.c,v 1.4 2002/04/22 21:38:03 wmay Exp $";
#endif

/* An implementation of semaphores using mutexes and condition variables */

#include <stdlib.h>

#include "SDL_error.h"
#include "SDL_timer.h"
#include "SDL_thread.h"
#include "SDL_systhread_c.h"


#ifdef DISABLE_THREADS

SDL_sem *SDL_CreateSemaphore(Uint32 initial_value)
{
	SDL_SetError("SDL not configured with thread support");
	return (SDL_sem *)0;
}

void SDL_DestroySemaphore(SDL_sem *sem)
{
	return;
}

int SDL_SemTryWait(SDL_sem *sem)
{
	SDL_SetError("SDL not configured with thread support");
	return -1;
}

int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout)
{
	SDL_SetError("SDL not configured with thread support");
	return -1;
}

int SDL_SemWait(SDL_sem *sem)
{
	SDL_SetError("SDL not configured with thread support");
	return -1;
}

Uint32 SDL_SemValue(SDL_sem *sem)
{
	return 0;
}

int SDL_SemPost(SDL_sem *sem)
{
	SDL_SetError("SDL not configured with thread support");
	return -1;
}

#else

struct SDL_semaphore
{
	Uint32 count;
	Uint32 waiters_count;
	SDL_mutex *count_lock;
	SDL_cond *count_nonzero;
};

SDL_sem *SDL_CreateSemaphore(Uint32 initial_value)
{
	SDL_sem *sem;

	sem = (SDL_sem *)malloc(sizeof(*sem));
	if ( ! sem ) {
		SDL_OutOfMemory();
		return(0);
	}
	sem->count = initial_value;
	sem->waiters_count = 0;

	sem->count_lock = SDL_CreateMutex();
	sem->count_nonzero = SDL_CreateCond();
	if ( ! sem->count_lock || ! sem->count_nonzero ) {
		SDL_DestroySemaphore(sem);
		return(0);
	}

	return(sem);
}

/* WARNING:
   You cannot call this function when another thread is using the semaphore.
*/
void SDL_DestroySemaphore(SDL_sem *sem)
{
	if ( sem ) {
		sem->count = 0xFFFFFFFF;
		while ( sem->waiters_count > 0) {
			SDL_CondSignal(sem->count_nonzero);
			SDL_Delay(10);
		}
		SDL_DestroyCond(sem->count_nonzero);
		SDL_mutexP(sem->count_lock);
		SDL_mutexV(sem->count_lock);
		SDL_DestroyMutex(sem->count_lock);
		free(sem);
	}
}

int SDL_SemTryWait(SDL_sem *sem)
{
	int retval;

	if ( ! sem ) {
		SDL_SetError("Passed a NULL semaphore");
		return -1;
	}

	retval = SDL_MUTEX_TIMEDOUT;
	SDL_LockMutex(sem->count_lock);
	if ( sem->count > 0 ) {
		--sem->count;
		retval = 0;
	}
	SDL_UnlockMutex(sem->count_lock);

	return retval;
}

int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout)
{
	int retval;

	if ( ! sem ) {
		SDL_SetError("Passed a NULL semaphore");
		return -1;
	}

	/* A timeout of 0 is an easy case */
	if ( timeout == 0 ) {
		return SDL_SemTryWait(sem);
	}

	SDL_LockMutex(sem->count_lock);
	++sem->waiters_count;
	retval = 0;
	while ( (sem->count == 0) && (retval != SDL_MUTEX_TIMEDOUT) ) {
		retval = SDL_CondWaitTimeout(sem->count_nonzero,
		                             sem->count_lock, timeout);
	}
	--sem->waiters_count;
	--sem->count;
	SDL_UnlockMutex(sem->count_lock);

	return retval;
}

int SDL_SemWait(SDL_sem *sem)
{
	return SDL_SemWaitTimeout(sem, SDL_MUTEX_MAXWAIT);
}

Uint32 SDL_SemValue(SDL_sem *sem)
{
	Uint32 value;
	
	value = 0;
	if ( sem ) {
		SDL_LockMutex(sem->count_lock);
		value = sem->count;
		SDL_UnlockMutex(sem->count_lock);
	}
	return value;
}

int SDL_SemPost(SDL_sem *sem)
{
	if ( ! sem ) {
		SDL_SetError("Passed a NULL semaphore");
		return -1;
	}

	SDL_LockMutex(sem->count_lock);
	if ( sem->waiters_count > 0 ) {
		SDL_CondSignal(sem->count_nonzero);
	}
	++sem->count;
	SDL_UnlockMutex(sem->count_lock);

	return 0;
}

#endif /* DISABLE_THREADS */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女在线视频一区| 精品处破学生在线二十三| 国产精品一区二区91| 免费看黄色91| 免费欧美高清视频| 成人av在线资源网| 成人不卡免费av| 99久久久精品免费观看国产蜜| 成人在线视频一区| 99re这里只有精品首页| 色8久久精品久久久久久蜜| 国产99久久久国产精品免费看| 国产精品99久久久久久似苏梦涵 | 成人av动漫网站| 成人禁用看黄a在线| 色综合一区二区三区| 91视频国产资源| 欧美日韩aaa| 欧美一区二区美女| 国产亚洲自拍一区| 成人欧美一区二区三区白人| 亚洲三级电影网站| 日韩国产精品大片| 日本怡春院一区二区| 久草精品在线观看| 99视频热这里只有精品免费| 在线观看91视频| 精品国产伦一区二区三区观看体验| 欧美激情艳妇裸体舞| 亚洲国产一区二区三区 | 国产欧美日本一区视频| 亚洲男女毛片无遮挡| 日韩av电影免费观看高清完整版 | 国产成人精品1024| 91欧美一区二区| 日韩欧美国产一二三区| 国产精品全国免费观看高清| 亚洲成a人在线观看| 美女久久久精品| 色综合欧美在线视频区| 91精品久久久久久久91蜜桃| 国产日韩欧美不卡在线| 亚洲国产综合人成综合网站| 国产老妇另类xxxxx| 欧美日韩一区二区三区四区| 久久综合久久鬼色中文字| 中文字幕亚洲精品在线观看 | 欧美大白屁股肥臀xxxxxx| 久久久精品2019中文字幕之3| 国产精品免费视频观看| 天使萌一区二区三区免费观看| 一本色道亚洲精品aⅴ| 91精品久久久久久久99蜜桃| 夜夜精品视频一区二区| 精品一区二区久久久| 宅男在线国产精品| 午夜视频在线观看一区二区三区| 成人精品gif动图一区| 国产欧美综合色| 国产在线精品一区二区| 日韩一区二区在线观看| 亚洲第一主播视频| 欧美日韩一区二区三区免费看| 欧美国产一区二区| 国产不卡视频一区| 久久久影视传媒| 国产在线精品一区二区不卡了| 欧美va在线播放| 美女www一区二区| 欧美一区欧美二区| 日韩电影在线看| 91精品国产欧美日韩| 亚洲aⅴ怡春院| 欧美日韩精品电影| 亚洲国产欧美在线人成| 在线影视一区二区三区| 亚洲一区二区四区蜜桃| 欧美在线影院一区二区| 亚洲午夜私人影院| 欧美日韩精品高清| 日韩黄色免费电影| 欧美群妇大交群的观看方式| 有坂深雪av一区二区精品| 91捆绑美女网站| 依依成人综合视频| 欧美日韩国产综合一区二区 | 日韩欧美高清在线| 经典一区二区三区| 国产欧美综合在线| 色偷偷一区二区三区| 日韩影院精彩在线| 精品少妇一区二区三区在线视频| 黑人巨大精品欧美一区| 国产精品人人做人人爽人人添| 色婷婷国产精品综合在线观看| 亚洲一区二区中文在线| 精品粉嫩aⅴ一区二区三区四区| 国产成人久久精品77777最新版本| 亚洲国产电影在线观看| 久久久精品国产免大香伊| 成人国产精品免费观看动漫| 亚洲精品国产成人久久av盗摄| 欧美精品电影在线播放| 韩国精品在线观看| 亚洲色大成网站www久久九九| 欧美色精品在线视频| 国产精品性做久久久久久| 一区二区三区精品| 欧美日本韩国一区二区三区视频| 日韩精品国产精品| 国产精品福利在线播放| 欧美性猛交xxxx黑人交| 久久国产精品免费| 亚洲一二三区视频在线观看| 精品国产91久久久久久久妲己 | 欧美一区二区三级| 不卡大黄网站免费看| 日韩av电影一区| 亚洲精品一二三区| 久久综合九色欧美综合狠狠| 色综合天天综合网天天狠天天| 天堂久久一区二区三区| 国产精品视频看| 欧美va在线播放| 欧美日本一区二区| 91色|porny| 国产中文字幕一区| 青娱乐精品视频| 亚洲一二三区在线观看| 一区二区中文字幕在线| 久久久久久久久一| 日韩三级免费观看| 欧美猛男gaygay网站| 色伊人久久综合中文字幕| www..com久久爱| 国产成人精品免费在线| 激情六月婷婷综合| 老司机精品视频在线| 亚洲电影中文字幕在线观看| 亚洲欧洲三级电影| 国产精品久久久久三级| 欧美国产日本韩| 久久久99精品免费观看| 精品国产乱码久久久久久免费 | 欧美自拍丝袜亚洲| 色综合久久久久综合99| 国产成人8x视频一区二区| 美女免费视频一区二区| 经典三级一区二区| 日韩主播视频在线| 国产综合久久久久影院| 免费在线看一区| 一区二区三区在线视频播放 | 丝袜亚洲精品中文字幕一区| 1024成人网色www| 亚洲人123区| 中文字幕亚洲精品在线观看| 中文字幕欧美日韩一区| 国产精品天干天干在观线| 亚洲国产高清在线| 久久久噜噜噜久噜久久综合| 久久蜜桃av一区精品变态类天堂 | 99久久久国产精品免费蜜臀| 99综合电影在线视频| 色婷婷综合久久久中文字幕| 在线观看欧美黄色| 制服丝袜激情欧洲亚洲| 精品国产91亚洲一区二区三区婷婷| 2017欧美狠狠色| 中文字幕一区二区三区av | 日韩一区二区三区电影在线观看| 欧美一区二区美女| 国产精品婷婷午夜在线观看| 一区二区三区中文免费| 日本不卡视频一二三区| 国产91精品久久久久久久网曝门| 99re热这里只有精品免费视频| 欧美亚日韩国产aⅴ精品中极品| 91精品国产黑色紧身裤美女| 久久综合狠狠综合久久综合88| 国产精品区一区二区三| 午夜天堂影视香蕉久久| 国产成人精品影院| 欧美色爱综合网| 国产欧美日韩在线观看| 亚洲aaa精品| 午夜精品123| 国产在线播精品第三| 日本道精品一区二区三区 | 亚洲视频香蕉人妖| 午夜精品福利久久久| 麻豆成人久久精品二区三区小说| 国产成人免费视频网站| 欧美高清一级片在线| 中文字幕成人av| 美女在线观看视频一区二区| 99re66热这里只有精品3直播| 日韩一区二区在线观看| 国产午夜一区二区三区| 奇米四色…亚洲|