?? beptimer.cpp
字號:
/***************************************************************************
*
* Module: beptimer.c
*
* Description: timer.
*
* Author: chenjian
*
* Copyright 2000, Trillium Digital Systems, Inc., All rights reserved
*
*
* Change Log:
*
* Date By Description
* ======== ======== ====================================================
* 10/29/03 chenjian Created
*
***************************************************************************/
/*
* Includes
*/
#include "stdafx.h"
#include "myphone.h"
#include "myphoneDlg.h"
#include "Rvsemaphore.h"
#include "beptimer.h"
#include "Rvtypes.h"
/*#include "semLib.h"*/
/*
* Typedefs
*/
/*
* Global variables
*/
static s_timer vecTimer[MAX_TIMER_NUM];
static RvSemaphore* timerSem;
/******************************************************************************
* *
* Message Queue Handling Routines. These include buffer handling routines.
* *
*****************************************************************************/
/***************************************************************************
*
* TimerInit()
*
* Arguments
* Input: None
*
* Returns: Nothing
*
* Description:
* 1. int the timer pool.
*
**************************************************************************/
void TimerInit()
{
int i;
RvUint32 startcount = RvUint32Const(1);
for (i = 0; i < MAX_TIMER_NUM; i++)
{
vecTimer[i].iInUse = FALSE;
}
*timerSem = CreateSemaphore(NULL,(long)startcount,RV_INT32_MAX,NULL);
}
int CreateTimer(unsigned int iTime)
{
int i;
/* int rateClk = sysClkRateGet();*/
int rateClk /*= getTickFrequency()*/;
if(WaitForSingleObject(timerSem,INFINITE) == WAIT_OBJECT_0)
{
for (i = 0; i < MAX_TIMER_NUM; i++)
{
if (vecTimer[i].iInUse == FALSE)
{
vecTimer[i].iInUse = TRUE;
vecTimer[i].iEndTick = /*tickGet() +*/ 1 +
rateClk * (iTime / 1000) + (iTime % 1000) * rateClk / 1000;
ReleaseSemaphore(timerSem,1,NULL);
return i;
}
}
}
ReleaseSemaphore(timerSem,1,NULL);
return -1;
}
void DeleteTimer(int* piTimerId)
{
if(WaitForSingleObject(timerSem,INFINITE) == WAIT_OBJECT_0)
{
DeleteTimerId(*piTimerId);
*piTimerId = -1;
ReleaseSemaphore(timerSem,1,NULL);
}
}
void DeleteTimerId(int iTimerId)
{
if (iTimerId >= 0 && iTimerId < MAX_TIMER_NUM)
{
vecTimer[iTimerId].iInUse = FALSE;
}
}
int getTimeOut(int iDelete, int* piTimeOut)
{
unsigned int iCurTick /*= tickGet()*/;
int i, iTick;
*piTimeOut = 0x7fffffff;
if(WaitForSingleObject(timerSem,INFINITE) == WAIT_OBJECT_0)
{
for (i = 0; i < MAX_TIMER_NUM; i++)
{
if (vecTimer[i].iInUse == TRUE)
{
iTick = vecTimer[i].iEndTick - iCurTick;
if (iTick <= 0)
{
if (iDelete)
{
DeleteTimerId(i);
}
*piTimeOut = 0;
ReleaseSemaphore(timerSem,1,NULL);
return i;
}
else if (iTick < *piTimeOut)
{
*piTimeOut = iTick;
}
}
}
if (*piTimeOut == 0x7fffffff)
{
*piTimeOut = -1;
}
ReleaseSemaphore(timerSem,1,NULL);
}
return -1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -