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

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

?? httimer.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
字號:
/***	TIMER MANAGER****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTTimer.c,v 2.28 2001/03/06 09:34:04 kahan Exp $****	Timers based on the X server timers**** Authors:**	EGP	Eric Prud'hommeaux (eric@w3.org)**	HFN	Henrik Frystyk Nielsen** Bugs***//* Implementation dependent include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "HTReqMan.h"#include "HTTimer.h"					 /* Implemented here */struct _HTTimer {    ms_t	millis;		/* Relative value in millis */    ms_t	expires;	/* Absolute value in millis */    BOOL	relative;    BOOL	repetitive;    void *	param;		/* Client supplied context */    HTTimerCallback * cbf;};PRIVATE HTList * Timers = NULL;			   /* List of timers */PRIVATE HTTimerSetCallback * SetPlatformTimer = NULL;PRIVATE HTTimerSetCallback * DeletePlatformTimer = NULL;#ifdef WATCH_RECURSIONPRIVATE HTTimer * InTimer = NULL;#define CHECKME(timer) if (InTimer != NULL) HTDEBUGBREAK("check timer\n"); InTimer = timer;#define CLEARME(timer) if (InTimer != timer) HTDEBUGBREAK("clear timer\n"); InTimer = NULL;#define SETME(timer) InTimer = timer;#else /* WATCH_RECURSION */#define CHECKME(timer)#define CLEARME(timer)#define SETME(timer)#endif /* !WATCH_RECURSION *//* JK: used by Amaya */PUBLIC BOOL HTTimer_expireAll (void){  HTList * cur;  HTTimer * timer;  if (Timers) {    /*    **  first delete all plattform specific timers to    **  avoid having a concurrent callback    */    cur = Timers;    while ((timer = (HTTimer *) HTList_nextObject(cur))) {      if (DeletePlatformTimer) DeletePlatformTimer(timer);    }     /*    ** simulate a timer timeout thru timer_dispatch    ** to kill its context    */    cur = Timers;    while ((timer = (HTTimer *) HTList_nextObject(cur))) {          /* avoid having it being refreshed */      timer->repetitive = NO;      HTTimer_dispatch (timer);      /* as the timer is erased, we start again from the top of the list */      cur = Timers;    }    return YES;  }  return NO;}/* ------------------------------------------------------------------------- *//***  When a timer has expired, we dispatch the event handler and re-register the**  timer with the next expiration time if repetitive. Otherwise we just leave**  it*/PRIVATE int Timer_dispatch (HTList * cur, HTList * last){    HTTimer * timer;    int ret = HT_ERROR;    timer = (HTTimer *)HTList_objectOf(cur);    if (timer == NULL) {#if 0        HTDEBUGBREAK("Timer dispatch couldn't find a timer\n");#endif        CLEARME(timer);	return HT_ERROR;    }#ifdef WWW_WIN_ASYNC    /* 2000/07/31 Jens Meggers (meggers@firepad.com):       On Windows, timers are always repetitive, so we have to delete the        timer */    if (DeletePlatformTimer)      DeletePlatformTimer(timer);#endif /* WWW_WIN_ASYNC */    if (timer->repetitive)	HTTimer_new(timer, timer->cbf, timer->param, timer->millis, YES, YES);    else	HTList_quickRemoveElement(cur, last);    HTTRACE(THD_TRACE, "Timer....... Dispatch timer %p\n" _ timer);    ret = (*timer->cbf) (timer, timer->param, HTEvent_TIMEOUT);    return ret;}PUBLIC BOOL HTTimer_registerSetTimerCallback (HTTimerSetCallback * cbf){    HTTRACE(CORE_TRACE, "Timer....... registering %p as timer set cbf\n" _ cbf);    if (cbf) {	SetPlatformTimer = cbf;	return YES;    }    return NO;}PUBLIC BOOL HTTimer_registerDeleteTimerCallback (HTTimerSetCallback * cbf){    HTTRACE(CORE_TRACE, "Timer....... registering %p as timer delete cbf\n" _ cbf);    if (cbf) {	DeletePlatformTimer = cbf;	return YES;    }    return NO;}PUBLIC ms_t HTTimer_expiresRelative (HTTimer * timer){    return timer ? timer->millis : 0;}PUBLIC ms_t HTTimer_expiresAbsolute (HTTimer * timer){    return timer ? timer->expires : 0;}PUBLIC HTTimerCallback * HTTimer_callback (HTTimer * timer){    return timer ? timer->cbf : NULL;}PUBLIC BOOL HTTimer_isRelative (HTTimer * timer){    return timer ? timer->relative : NO;}PUBLIC BOOL HTTimer_delete (HTTimer * timer){    HTList * last;    HTList * cur;    CHECKME(timer);    if ((cur = HTList_elementOf(Timers, (void *)timer, &last)) == NULL) CLEARME(timer);    if (HTList_quickRemoveElement(cur, last)) {	HTTRACE(THD_TRACE, "Timer....... Deleted active timer %p\n" _ timer);    } else { 	HTTRACE(THD_TRACE, "Timer....... Deleted expired timer %p\n" _ timer);    }    /*    **  Call any platform specific timer handler    */    if (DeletePlatformTimer) DeletePlatformTimer(timer);    CLEARME(timer);    HT_FREE(timer);    return YES;}PUBLIC HTTimer * HTTimer_new (HTTimer * timer, HTTimerCallback * cbf,			      void * param, ms_t millis, BOOL relative,			      BOOL repetitive){    HTList * last;    HTList * cur;    ms_t now = HTGetTimeInMillis();    ms_t expires;    HTTimer * pres;    CHECKME(timer);    expires = millis;    if (relative)	expires += now;    else	millis = expires-now;    if (Timers == NULL)	Timers = HTList_new();    if (timer) {	/*	if a timer is specified, it should already exist	 */	if ((cur = HTList_elementOf(Timers, (void *)timer, &last)) == NULL) {	    HTDEBUGBREAK("Timer %p not found\n" _ timer);	    CLEARME(timer);	    return NULL;	}	HTList_quickRemoveElement(cur, last);	HTTRACE(THD_TRACE, "Timer....... Found timer %p with callback %p, context %p, and %s timeout %d\n" _ 		    timer _ cbf _ param _ relative ? "relative" : "absolute" _ millis);	/* could optimize by sorting from last when ((HTList *)(last->object))->expires < expires (most common case) */    } else {	/*	create a new timer	 */	if ((timer = (HTTimer *) HT_CALLOC(1, sizeof(HTTimer))) == NULL)	    HT_OUTOFMEM("HTTimer_new");	last = Timers;	HTTRACE(THD_TRACE, "Timer....... Created %s timer %p with callback %p, context %p, and %s timeout %d\n" _ 		    repetitive ? "repetitive" : "one shot" _ 		    timer _ cbf _ param _ 		    relative ? "relative" : "absolute" _ millis);    }    /*    **  Sort new element into list    */    for (cur = last; 	 (pres = (HTTimer *) HTList_nextObject(cur)) != NULL && pres->expires < expires; 	 last = cur);    /*    **  If the expiration is 0 then we still register it but dispatch it immediately.    */    if (!millis) HTTRACE(THD_TRACE, "Timer....... Timeout is 0 - expires NOW\n");    timer->expires = expires;    timer->cbf = cbf;    timer->param = param;    timer->millis = millis;    timer->relative = relative;    timer->repetitive = repetitive;    SETME(timer);    /*    **	add to list if timer is new    */    cur = HTList_addList(last, (void *)timer);    /*    **  Call any platform specific timer handler    */    if (SetPlatformTimer) SetPlatformTimer(timer);    /* Check if the timer object has already expired. If so then dispatch */    if (timer->expires <= now) Timer_dispatch(cur, last);    CLEARME(timer);    return timer;}PUBLIC BOOL HTTimer_refresh (HTTimer * timer, ms_t now){    if (timer == NULL || timer->repetitive == NO)	return NO;    if (HTTimer_new(timer, timer->cbf, timer->param, timer->millis, YES, YES) == NULL)	return NO;    return YES;}PUBLIC BOOL HTTimer_deleteAll (void){    HTList * cur = Timers;    HTTimer * pres;    if (Timers) {	while ((pres = (HTTimer *) HTList_nextObject(cur))) {	    /*	    **  Call any platform specific timer handler	    */	    if (DeletePlatformTimer) DeletePlatformTimer(pres);	    HT_FREE(pres);	}	HTList_delete(Timers);	Timers = NULL;	return YES;    }    return NO;}PUBLIC int HTTimer_dispatch (HTTimer * timer){    HTList * cur;    HTList * last = Timers;    cur = HTList_elementOf(Timers, (void *)timer, &last);    return Timer_dispatch(cur, last);}/***  Check if the timer object has already expired*/PUBLIC BOOL HTTimer_hasTimerExpired (HTTimer * timer){    return (timer && timer->expires <= HTGetTimeInMillis());}PUBLIC int HTTimer_next (ms_t * pSoonest){    HTList * cur = Timers;    HTList * last = Timers;    HTTimer * pres;    ms_t now = HTGetTimeInMillis();    int ret = HT_OK;    /*    **  Dispatch all timers that have expired    */    while (Timers && (pres = (HTTimer *) HTList_nextObject(cur))) {	if (pres->expires <= now) {	    if ((ret = Timer_dispatch(cur, last)) != HT_OK) break;	    cur = last = Timers;	} else {	    last = cur;	}	    }    if (pSoonest) {	/*	**	First element in Timers is the next to expire.	*/	HTList * cur = Timers;	/* for now */	pres = (HTTimer *) HTList_nextObject(cur);	*pSoonest = pres ? pres->expires - now : 0;    }    return ret;}#ifdef WATCH_RECURSIONextern void CheckSockEvent(HTTimer * timer, HTTimerCallback * cbf, void * param);PRIVATE void CheckTimers(void){    HTList * cur = Timers;    HTTimer * pres;    while ((pres = (HTTimer *) HTList_nextObject(cur))) {	CheckSockEvent(pres, pres->cbf, pres->param);    }}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级久久久久久久大片| 婷婷亚洲久悠悠色悠在线播放| 欧美电视剧在线看免费| 欧美日韩综合不卡| 欧美日韩国产一区二区三区地区| 色狠狠色狠狠综合| 欧美色区777第一页| 欧美亚洲动漫精品| 欧美色视频在线观看| 色婷婷激情一区二区三区| 色偷偷久久一区二区三区| 99免费精品视频| 在线亚洲一区二区| 欧美日韩中字一区| 欧美一区二区三区四区五区| 日韩欧美国产午夜精品| 久久久久综合网| 国产精品欧美经典| 亚洲乱码国产乱码精品精小说| 亚洲美女少妇撒尿| 午夜精品aaa| 日韩欧美国产一区在线观看| 精品国产一区二区精华| 久久久久9999亚洲精品| 最新中文字幕一区二区三区| 亚洲免费电影在线| 奇米777欧美一区二区| 国产精品一区二区三区四区| 99久久精品国产精品久久| 欧洲av一区二区嗯嗯嗯啊| 欧美一区二区三区免费| 久久久av毛片精品| 亚洲精品免费播放| 欧美aaa在线| 成人美女视频在线看| 91国产精品成人| 欧美大片在线观看一区| 中文字幕的久久| 午夜欧美大尺度福利影院在线看| 精品一区二区三区蜜桃| 91麻豆国产福利精品| 欧美日韩国产经典色站一区二区三区 | 久久久久久久久久久久久女国产乱 | 国产一区亚洲一区| 99久久99久久精品免费看蜜桃| 欧美美女直播网站| 久久久久久久网| 亚洲午夜免费视频| 国产在线视视频有精品| 色偷偷88欧美精品久久久| 日韩欧美国产一区二区三区| 亚洲欧洲国产日韩| 麻豆精品久久久| 91在线免费视频观看| 日韩欧美一区在线观看| 最新中文字幕一区二区三区| 精品一区二区在线免费观看| 91视频免费播放| 久久综合精品国产一区二区三区| 亚洲乱码精品一二三四区日韩在线| 麻豆精品国产传媒mv男同| 97se狠狠狠综合亚洲狠狠| 日韩欧美成人一区| 亚洲影院免费观看| 国产 欧美在线| 日韩一区二区三区免费看| 依依成人综合视频| 国产高清精品在线| 在线综合视频播放| 亚洲欧美激情一区二区| 国产很黄免费观看久久| 制服丝袜在线91| 伊人夜夜躁av伊人久久| 成人爽a毛片一区二区免费| 欧美一级久久久| 亚洲成人午夜影院| 一本到不卡免费一区二区| 久久精品人人做人人爽人人| 日韩**一区毛片| 久久国产精品99久久久久久老狼| 夜夜揉揉日日人人青青一国产精品| 久99久精品视频免费观看| 欧美亚洲国产bt| 成人av免费在线| 亚洲精品一线二线三线| 亚洲成人免费视| 91国模大尺度私拍在线视频| 国产精品传媒在线| 成人综合婷婷国产精品久久蜜臀| 精品国产制服丝袜高跟| 老色鬼精品视频在线观看播放| 欧美日韩国产综合一区二区| 一区二区欧美在线观看| 色综合欧美在线| 中文字幕一区二区三中文字幕| 国产乱码精品1区2区3区| 久久一区二区三区四区| 九九**精品视频免费播放| 欧美一区二区日韩| 免费精品99久久国产综合精品| 欧美日韩亚洲综合| 午夜精品久久久久久不卡8050| 欧美性受极品xxxx喷水| 亚洲尤物视频在线| 欧美精品一级二级三级| 午夜欧美电影在线观看| 在线观看91精品国产麻豆| 日本vs亚洲vs韩国一区三区二区| 91精品久久久久久蜜臀| 日本成人超碰在线观看| 日韩精品一区二区三区swag| 精品亚洲国内自在自线福利| 精品对白一区国产伦| 国产精品一区2区| 国产精品美女久久福利网站| 91片黄在线观看| 一区二区三区影院| 欧美老人xxxx18| 美日韩黄色大片| 欧美精品一区二区三区视频| 国产乱一区二区| 国产精品视频免费看| 91美女视频网站| 午夜一区二区三区视频| 日韩精品一区国产麻豆| 国产精品一区二区久激情瑜伽| 欧美韩日一区二区三区| 色婷婷综合久久久中文一区二区| 亚洲图片欧美视频| 欧美一区二区在线免费观看| 国产在线乱码一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩一级精品视频在线观看| 国精品**一区二区三区在线蜜桃| 国产欧美日韩在线| 色猫猫国产区一区二在线视频| 日韩专区中文字幕一区二区| 国产视频在线观看一区二区三区 | 欧美男生操女生| 国产精品系列在线观看| 亚洲精品日产精品乱码不卡| 欧美一区二区成人6969| 国产成人精品影视| 一区二区三区波多野结衣在线观看 | 欧美电影免费提供在线观看| 成人精品一区二区三区中文字幕| 亚洲一区在线观看网站| 日韩成人精品视频| 国产精品毛片久久久久久| 欧美日韩第一区日日骚| 国产aⅴ综合色| 香蕉影视欧美成人| 国产三级精品三级在线专区| 欧美日韩精品一区视频| 国产成人欧美日韩在线电影| 亚洲韩国一区二区三区| 国产视频亚洲色图| 欧美日韩免费视频| 国产福利一区在线观看| 五月婷婷久久丁香| 国产精品久久久久久亚洲伦| 欧美一区二区国产| 91丨porny丨国产| 激情综合色丁香一区二区| 一区二区视频在线| 久久久99久久精品欧美| 制服丝袜激情欧洲亚洲| 色狠狠色狠狠综合| 国产69精品一区二区亚洲孕妇| 三级欧美在线一区| 亚洲精选一二三| 久久精品水蜜桃av综合天堂| 69堂成人精品免费视频| 97久久人人超碰| 国产乱码字幕精品高清av| 日韩av在线播放中文字幕| 亚洲精品成a人| 国产精品五月天| 久久综合视频网| 欧美精品高清视频| 欧美亚洲丝袜传媒另类| 成人av在线资源网| 国产精品影视网| 美腿丝袜亚洲色图| 亚洲成av人片| 亚洲成人av中文| 亚洲一区日韩精品中文字幕| 中文字幕在线不卡一区| 久久久久久一二三区| 欧美成人三级电影在线| 欧美一区二区三区影视| 3d动漫精品啪啪| 欧美性一级生活| 91黄视频在线| 色偷偷一区二区三区| 97精品国产97久久久久久久久久久久| 国产一区二区91| 国内精品免费**视频| 国内成+人亚洲+欧美+综合在线| 毛片av中文字幕一区二区|