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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? guitimer.c

?? 這是我移植到GBA游戲機(jī)上的uCGUI3.24 可以通過(guò)模擬器仿真
?? C
字號(hào):
/*
*********************************************************************************************************
*                                                uC/GUI
*                        Universal graphic software for embedded applications
*
*                       (c) Copyright 2002, Micrium Inc., Weston, FL
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*              礐/GUI is protected by international copyright laws. Knowledge of the
*              source code may not be used to write a similar product. This file may
*              only be used in accordance with a license and should not be redistributed
*              in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File        : GUITimer.c
Purpose     : Supplies timers for new emWin GSC
----------------------------------------------------------------------
---------------------------END-OF-HEADER------------------------------
*/


#include <stddef.h>           /* needed for definition of NULL */
#include "GUI_Protected.h"


/*
  *****************************************************************
  *                                                               *
  *              Config defaults                                  *
  *                                                               *
  *****************************************************************
*/

/*
      *************************************************************
      *                                                           *
      *                 Object definition                         *
      *                                                           *
      *************************************************************

*/
typedef struct {
  GUI_TIMER_CALLBACK* cb;
  GUI_TIMER_Handle hNext;
  int Flags;
	U32 Context;
	GUI_TIMER_TIME t0;
	GUI_TIMER_TIME Period;
} GUI_TIMER_Obj;

/*
  *****************************************************************
  *                                                               *
  *              Static data                                      *
  *                                                               *
  *****************************************************************
*/

GUI_TIMER_Handle hFirstTimer;


/*
  ********************************************************************
  *                                                                  *
  *                 Macros for internal use                          *
  *                                                                  *
  ********************************************************************
*/

#define GUI_TIMER_H2P(h) (GUI_TIMER_Obj*)GUI_ALLOC_H2P(h)

/*
  ********************************************************************
  *                                                                  *
  *                    Static routines                               *
  *                                                                  *
  ********************************************************************
*/


static void Unlink(GUI_TIMER_Handle hTimer) {
  GUI_TIMER_Obj* pTimer = GUI_TIMER_H2P(hTimer);
  GUI_TIMER_Handle hi;
  GUI_TIMER_Obj*   pi;
/* Check if it is the first element */
  if (hFirstTimer == hTimer) {
    hFirstTimer = pTimer->hNext;
    return;
	}
  hi = hFirstTimer;
/* Try to find it in the list ... */
  while(hi) {
    /* GUI_ASSERT(hi<1000,0); */
    pi = GUI_TIMER_H2P(hi);
    if (pi->hNext == hTimer) {
      pi->hNext = pTimer->hNext;
      break;
		}        
    hi = pi->hNext;
  }  
}

/*********************************************************************
   Link new Timer
	 ==============

	This routine inserts the new timer (referenced by its handle) into
	the linked list. The linked list is sorted according to timestamps.
	The first element is the timer which expires first.
*/
void Link(GUI_TIMER_Handle hNew) {
  GUI_TIMER_Obj*   pNew        = GUI_TIMER_H2P(hNew);
  GUI_TIMER_Obj*   pTimer;
  GUI_TIMER_Obj*   pNext;
  GUI_TIMER_Handle hNext;
  if (hFirstTimer ==0) { /* List is empty, make it the only element */
    hFirstTimer = hNew;
	  pNew->hNext = 0;
  } else {
    GUI_TIMER_Obj* pFirstTimer      = GUI_TIMER_H2P(hFirstTimer);
/* Check if we have to make it the first element */
    if ((pNew->t0 - pFirstTimer->t0) <=0) {
      pNew->hNext = hFirstTimer;
      hFirstTimer = hNew;
			return;
		} else {
      GUI_TIMER_Handle hTimer = hFirstTimer;
/* Put it into the list */
      do {
        pTimer       = GUI_TIMER_H2P(hTimer);
        hNext        = pTimer->hNext;
        if (hNext ==0)
					goto Append;
        pNext      = GUI_TIMER_H2P(hNext);
				if ((pNew->t0 - pNext->t0) <=0) {
          pNew->hNext  = hNext;
          pTimer->hNext= hNew;
          return;
				}
			} while(1);
/* Put it at the end of the list */
Append:
      pNew->hNext  = hNext;
      pTimer->hNext= hNew;
      return;
		}
  }
}

/*
  ********************************************************************
  *
  *        Static routines:  Exec
  *
  ********************************************************************
*/


int GUI_TIMER_Exec(void) {
  int r = 0;
  GUI_TIMER_TIME t = GUI_GetTime();
  GUI_LOCK(); {
    while (hFirstTimer) {
     	GUI_TIMER_Obj* pTimer = GUI_TIMER_H2P(hFirstTimer);
      if ((pTimer->t0-t) <=0) {
        GUI_TIMER_MESSAGE tm;
        tm.Time = t;
				tm.Context = pTimer->Context;
        hFirstTimer = pTimer->hNext;
				pTimer->cb(&tm);
        r = 1;
			} else
			  break;
    }
    /*
		GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->t0 = Time;
    */
  } GUI_UNLOCK(); 
  return r;
}


/*
  ********************************************************************
  *                                                                  *
  *        Exported routines:  Create                                *
  *                                                                  *
  ********************************************************************
*/

GUI_TIMER_Handle GUI_TIMER_Create      (    GUI_TIMER_CALLBACK* cb,
                                    int Time,
                                    U32 Context,
                                    int Flags) {
  GUI_TIMER_Handle hObj;
  GUI_TIMER_Obj* pObj;
  GUI_LOCK();
  GUI_USE_PARA(Flags);
  GUI_USE_PARA(Time);
  GUI_pfTimerExec = GUI_TIMER_Exec;
	{
    /* Alloc memory for obj */
    hObj = GUI_ALLOC_ALLOC(sizeof(GUI_TIMER_Obj));
    pObj = GUI_TIMER_H2P(hObj);
    /* init member variables */
    pObj->cb = cb;
		pObj->Context = Context;
    /* Link it */
		Link(hObj);
	} GUI_UNLOCK();
  return hObj;
}



/*
  ********************************************************************
  *                                                                  *
  *        Exported routines:  Delete                                *
  *                                                                  *
  ********************************************************************
*/

void GUI_TIMER_Delete(GUI_TIMER_Handle hObj) {
/* Unlink Timer */
  GUI_LOCK();
    Unlink(hObj);
    GUI_ALLOC_FREE(hObj);
  GUI_UNLOCK();
}

/*
  ********************************************************************
  *                                                                  *
  *        Exported routines:  Various methods                       *
  *                                                                  *
  ********************************************************************
*/
void GUI_TIMER_SetPeriod(GUI_TIMER_Handle hObj, GUI_TIMER_TIME Period) {
  GUI_LOCK(); {
    GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->Period = Period;
  } GUI_UNLOCK(); 
}

void GUI_TIMER_SetTime(GUI_TIMER_Handle hObj, GUI_TIMER_TIME Time) {
  GUI_LOCK(); {
   	GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->t0 = Time;
  } GUI_UNLOCK(); 
}

void GUI_TIMER_SetDelay(GUI_TIMER_Handle hObj, GUI_TIMER_TIME Delay) {
  GUI_LOCK(); {
   	GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->t0 = Delay;
		Unlink(hObj);
		Link(hObj);
  } GUI_UNLOCK(); 
}

void GUI_TIMER_Restart(GUI_TIMER_Handle hObj) {
  GUI_LOCK(); {
   	GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
    pObj->t0 = GUI_GetTime() +pObj->Period;
		Unlink(hObj);
		Link(hObj);
  } GUI_UNLOCK(); 
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美国毛片一区二区| 日韩一区二区三区在线观看| 色综合天天综合色综合av| 欧美精品日韩综合在线| 国产精品免费aⅴ片在线观看| 一区二区激情视频| 国产精品一线二线三线| 欧洲一区二区三区免费视频| 精品日韩一区二区三区免费视频| 亚洲乱码一区二区三区在线观看| 国产美女一区二区三区| 欧美高清视频www夜色资源网| 中文字幕视频一区二区三区久| 麻豆传媒一区二区三区| 91传媒视频在线播放| 欧美国产激情二区三区| 韩国女主播成人在线| 欧美区视频在线观看| 亚洲欧洲中文日韩久久av乱码| 韩国av一区二区三区| 欧美日韩国产高清一区| 日韩理论片网站| 成人一级片在线观看| 欧美精品一区男女天堂| 午夜电影网亚洲视频| 一本大道av一区二区在线播放| 中文欧美字幕免费| 国产成人精品免费视频网站| 日韩视频中午一区| 三级久久三级久久| 在线成人小视频| 亚洲午夜免费福利视频| 91黄色激情网站| 亚洲欧美日本韩国| 91蝌蚪porny| 亚洲免费在线电影| 欧美手机在线视频| 亚洲国产视频在线| 欧美日韩免费电影| 日韩中文字幕1| 91精品国产高清一区二区三区 | 欧美三级中文字幕| 一区二区三区精品在线| 91国偷自产一区二区开放时间 | 9i看片成人免费高清| 国产精品二三区| 日本乱码高清不卡字幕| 亚洲第一av色| 91精品国产色综合久久不卡蜜臀| 亚洲不卡一区二区三区| 日韩区在线观看| 久久99精品一区二区三区三区| 欧美精品一区二区精品网| 国产呦萝稀缺另类资源| 欧美—级在线免费片| 91色porny在线视频| 亚洲自拍偷拍网站| 日韩免费一区二区| 国产福利一区在线| 亚洲乱码中文字幕综合| 欧美久久久久中文字幕| 蜜臀av在线播放一区二区三区| 精品少妇一区二区三区在线播放| 国产一区二区三区在线观看免费 | 日本麻豆一区二区三区视频| 精品国产一区二区国模嫣然| 成人黄页在线观看| 亚洲午夜电影在线| 2023国产精华国产精品| 99久久国产综合精品色伊| 亚洲一区二区三区三| 日韩欧美国产三级| 99久久精品免费观看| 日韩中文字幕不卡| 国产精品久久久久久亚洲毛片| 欧美日韩国产123区| 国产一区二区三区av电影| 亚洲精品国产视频| 久久午夜国产精品| 91精彩视频在线观看| 国产在线观看一区二区| 一区二区三区视频在线看| 日韩美女一区二区三区四区| 成人免费视频免费观看| 视频在线观看国产精品| 国产精品久久久久aaaa| 91精品国产综合久久久久久漫画 | 欧美mv日韩mv| 在线亚洲+欧美+日本专区| 国模无码大尺度一区二区三区| 亚洲天天做日日做天天谢日日欢| 制服丝袜中文字幕一区| 成年人国产精品| 麻豆成人91精品二区三区| 亚洲天堂福利av| 久久久久国产精品人| 欧美二区在线观看| 97国产精品videossex| 精品一区二区影视| 亚洲成av人片一区二区三区| 国产欧美一区二区精品秋霞影院 | 中文字幕中文乱码欧美一区二区| 欧美猛男男办公室激情| 91一区一区三区| 国产经典欧美精品| 另类小说欧美激情| 亚洲国产综合人成综合网站| 国产欧美日韩三级| 久久人人97超碰com| 91精品啪在线观看国产60岁| 91小视频在线| 国产精品69久久久久水密桃 | 久久国产生活片100| 午夜欧美在线一二页| 亚洲男同性视频| 国产精品国产馆在线真实露脸| 精品乱人伦小说| 制服丝袜国产精品| 欧美精品亚洲二区| 欧美日韩视频专区在线播放| 91丨porny丨国产| 粉嫩嫩av羞羞动漫久久久| 国产精品自在在线| 精品综合免费视频观看| 人人超碰91尤物精品国产| 亚洲bt欧美bt精品| 日韩电影一二三区| 日本不卡视频一二三区| 亚洲观看高清完整版在线观看| 亚洲乱码一区二区三区在线观看| 亚洲欧洲成人精品av97| 国产精品美女久久久久久久久久久 | 成人精品鲁一区一区二区| 国产91色综合久久免费分享| 黄色日韩三级电影| 国产伦精品一区二区三区免费迷| 韩国成人在线视频| 国内精品国产三级国产a久久 | 欧美日韩一二区| 久久久久久久久久久久久女国产乱| 中文字幕一区二区视频| 日本va欧美va瓶| 97aⅴ精品视频一二三区| 欧美一区二区三区系列电影| 中文字幕在线播放不卡一区| 亚洲h精品动漫在线观看| 国产精华液一区二区三区| 欧美乱熟臀69xxxxxx| 国产精品免费av| 精品一区二区三区视频在线观看| 色偷偷久久人人79超碰人人澡| 欧美大胆人体bbbb| 一区二区高清视频在线观看| 久久 天天综合| 91久久精品一区二区| 国产性色一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 色综合色狠狠天天综合色| www国产精品av| 婷婷久久综合九色国产成人| 不卡视频一二三| 久久综合色8888| 免费观看91视频大全| 欧美日韩久久久一区| 中文字幕一区二区三区四区 | 亚洲午夜精品17c| av色综合久久天堂av综合| 久久久久99精品一区| 久久99久久精品| 日韩精品一区二区三区四区视频| 亚洲一区在线视频观看| 成人动漫在线一区| 国产欧美在线观看一区| 精品一二线国产| 欧美videos大乳护士334| 日韩国产欧美在线视频| 欧美日韩一区二区三区视频| 亚洲欧美电影院| 91网上在线视频| 中文字幕色av一区二区三区| 高清不卡一区二区| 国产三级欧美三级日产三级99| 精品一区二区三区日韩| 欧美成va人片在线观看| 免费黄网站欧美| 日韩欧美激情在线| 久久成人麻豆午夜电影| 欧美不卡视频一区| 久久精品国产成人一区二区三区| 欧美夫妻性生活| 日本不卡一区二区| 日韩欧美国产午夜精品| 激情综合一区二区三区| ww久久中文字幕| 国产mv日韩mv欧美| 综合在线观看色| 欧美日韩一区二区在线观看视频| 亚洲18影院在线观看| 欧美色综合影院| 日本系列欧美系列|