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

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

?? guitimer.c

?? 使用coderwarrior打開 內(nèi)含中文字庫(kù)
?? 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(); 
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看国产日韩| 色88888久久久久久影院按摩| 国产精品二区一区二区aⅴ污介绍| 欧美私人免费视频| 国产91精品一区二区麻豆网站 | 亚洲国产综合色| 久久久亚洲精品一区二区三区| 91同城在线观看| 国产盗摄一区二区| 蜜桃视频第一区免费观看| 亚洲精品日韩一| 国产片一区二区三区| 欧美精品乱人伦久久久久久| 99国产精品久| 成人黄色电影在线 | 国产欧美一区二区在线观看| 51精品国自产在线| 欧美视频在线一区| 91小视频免费观看| 成人久久视频在线观看| 国产精品99久久久久久久vr| 日本色综合中文字幕| 亚洲国产日韩av| 夜夜精品视频一区二区| 中文字幕在线一区二区三区| 久久综合九色欧美综合狠狠| 日韩一区二区三区在线观看| 欧美日韩三级视频| 欧美性猛片aaaaaaa做受| 91国产免费看| 色综合欧美在线视频区| 99国产精品视频免费观看| 国v精品久久久网| 国产成人啪免费观看软件| 激情伊人五月天久久综合| 免费观看在线色综合| 日韩经典一区二区| 日韩电影免费在线| 日韩精品一二三| 日韩电影在线观看一区| 日本在线不卡视频一二三区| 日韩av一二三| 免费观看在线色综合| 美女视频一区在线观看| 精品影院一区二区久久久| 国产精品一区一区| 国产成人福利片| 成人h动漫精品一区二区| 成人99免费视频| 91久久精品一区二区三区| 在线精品亚洲一区二区不卡| 欧美日韩精品高清| 91精品黄色片免费大全| 精品久久久网站| 国产日韩三级在线| 综合电影一区二区三区| 亚洲国产乱码最新视频| 日韩精品一区第一页| 精品一区二区三区久久久| 懂色av一区二区在线播放| 99久久99久久精品国产片果冻| 色婷婷国产精品久久包臀| 欧美日韩国产区一| 久久综合五月天婷婷伊人| 国产精品国产三级国产普通话三级| 亚洲精品中文在线| 蜜臀久久99精品久久久久宅男 | 亚洲专区一二三| 免费成人美女在线观看.| 国产成人精品亚洲777人妖| 9久草视频在线视频精品| 欧美日韩亚洲国产综合| 久久综合一区二区| 亚洲精品视频在线观看免费| 青青草成人在线观看| 丰满放荡岳乱妇91ww| 欧美亚洲综合另类| 久久久夜色精品亚洲| 亚洲私人黄色宅男| 日韩成人精品视频| 国产成人无遮挡在线视频| 欧美在线三级电影| 久久精品日产第一区二区三区高清版| 樱花影视一区二区| 国产一区二区三区免费播放| 色综合天天综合在线视频| 精品国精品国产尤物美女| 亚洲免费观看高清在线观看| 韩国av一区二区三区| 欧美性视频一区二区三区| 国产欧美一区二区三区网站| 五月婷婷激情综合| 成人精品视频一区| 日韩欧美国产电影| 亚洲一区在线视频| 国产美女一区二区三区| 欧美三级电影在线观看| 精品成人a区在线观看| 亚洲国产婷婷综合在线精品| 成人精品在线视频观看| 日韩免费在线观看| 亚洲成av人片| 色综合色综合色综合色综合色综合 | 亚洲一区视频在线| 北条麻妃一区二区三区| 日韩区在线观看| 一区二区国产视频| 成人爱爱电影网址| 国产亚洲va综合人人澡精品| 亚洲二区在线观看| 99国产精品视频免费观看| 久久九九影视网| 久久精品国产亚洲一区二区三区| 欧美视频一区二区在线观看| 国产精品电影一区二区三区| 国内欧美视频一区二区 | 成人免费在线视频观看| 久久99国产精品久久99果冻传媒| 欧美人与禽zozo性伦| 亚洲免费成人av| 91免费观看在线| 欧美经典三级视频一区二区三区| 国产主播一区二区| 精品少妇一区二区三区视频免付费| 亚洲第一成人在线| 欧美日韩大陆在线| 性欧美疯狂xxxxbbbb| 欧美三电影在线| 亚洲一卡二卡三卡四卡无卡久久| 91片在线免费观看| 日韩精品视频网| 欧美色综合久久| 亚洲国产一区视频| 欧美另类变人与禽xxxxx| 亚洲一区成人在线| 欧美精品久久久久久久多人混战| 天天综合日日夜夜精品| 制服丝袜亚洲色图| 美女一区二区视频| 久久综合九色综合97婷婷女人| 国产一区二区在线观看免费| 久久久久亚洲蜜桃| 国产白丝精品91爽爽久久| 国产精品全国免费观看高清| av色综合久久天堂av综合| 亚洲精品日韩综合观看成人91| 欧美中文一区二区三区| 午夜成人在线视频| 欧美一级二级三级乱码| 精品一区二区成人精品| 亚洲国产精品激情在线观看| 99热精品国产| 亚洲综合999| 欧美一级欧美一级在线播放| 精品在线亚洲视频| 国产精品久久看| 欧美在线观看一区| 麻豆成人久久精品二区三区红| 亚洲精品在线免费播放| 国产福利精品导航| 亚洲综合成人在线| 欧美mv日韩mv亚洲| proumb性欧美在线观看| 亚洲黄色在线视频| 欧美一区二区三区免费视频| 国产原创一区二区| 亚洲日本护士毛茸茸| 欧美日韩国产高清一区二区三区| 精品综合久久久久久8888| 中文字幕五月欧美| 717成人午夜免费福利电影| 国产精品1区2区| 亚洲国产精品天堂| 国产午夜精品一区二区三区四区| 成人高清免费观看| 丝袜美腿亚洲综合| 中文字幕巨乱亚洲| 91精品一区二区三区久久久久久| 高清不卡在线观看av| 天天综合网 天天综合色| 国产欧美精品一区aⅴ影院| 欧美性大战xxxxx久久久| 国产一区二区三区高清播放| 夜夜嗨av一区二区三区网页| 久久九九全国免费| 欧美一区二区视频在线观看| 成人激情开心网| 美国欧美日韩国产在线播放| 国产精品国产自产拍高清av王其| 欧美一区二区精品在线| 色哟哟一区二区| 国产91高潮流白浆在线麻豆| 午夜激情一区二区| |精品福利一区二区三区| 久久综合狠狠综合久久激情| 欧美日韩小视频| 91在线播放网址| 国产91在线|亚洲| 国产综合色产在线精品| 日韩高清不卡一区二区三区|