⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beptimer.cpp

📁 基于h323协议的软phone
💻 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 + -