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

📄 timerqueue.cc

📁 RSA algorithm implementation is given
💻 CC
字号:
#include "common.h"#include "externDec.h"int timerQueue::timer_add(u_int64_t timeVal, timer_hfunc_t func, void *dataVal){	timer	timerOb;	struct	timerData	*tData, *tempData;	u_int64_t	currtime=getcurrtime();#ifdef DEBUG	cout << "timer_add: entered" << endl;#endif	tempData = (struct timerData *)dataVal;	tData = (struct timerData *)malloc(sizeof(struct timerData));	tData->type = tempData->type;	tData->data = tempData->data;#ifdef DEBUG	cout << "timer_add: timer type is " << tData->type << "timeout is  " << timeVal << "currtime is " << currtime <<endl; #endif	timerOb.timeout = currtime + timeVal; /* absolute time in msec */#ifdef DEBUG	cout << "timer_add: absolute timeout is  " << timerOb.timeout <<endl; #endif	timerOb.handler = func;	timerOb.data = tData;	/* insert at the right place */	list<timer>::iterator	iter;	if(timerQ.size() == 0)	{#ifdef DEBUG		cout << "timer_add: timer size 0 " << endl;#endif		timerQ.push_back(timerOb);	}	else	{#ifdef DEBUG		cout << "timer_add: timer size " << timerQ.size() << endl;#endif		iter=timerQ.begin();		while(timerOb.timeout > iter->timeout && (iter != timerQ.end()))		{			iter++;#ifdef DEBUG			cout << "timerQueue: timer_add: within while " << endl;#endif		}		if(iter == timerQ.end())		{#ifdef DEBUG			cout << "timerQueue: timer_add:  iter reached end " << endl;#endif			timerQ.push_back(timerOb);		}		else		{#ifdef DEBUG			cout << "timerQueue: timer_add:  insert in the middle" << endl;#endif			timerQ.insert(iter,timerOb);		}	}	return 0;	}int timerQueue::scheduleTimer(){	list<timer>::iterator	iter,tmp_iter;	iter=timerQ.begin();	u_int64_t	currtime = getcurrtime();#ifdef DEBUG	cout << "scheduleTimer: entered timer size is " << timerQ.size() << " timeout is " << iter->timeout  << "currtime is" << currtime << endl;#endif	while((iter->timeout <= currtime) && (iter != timerQ.end()))	{		iter->handler(iter->data);		iter++;		tmp_iter = iter;		iter--;		timerQ.erase(iter);		iter = tmp_iter;	}	if((iter->timeout > 0) && (iter->timeout > currtime) && (iter != timerQ.end()))		setRealTimer((iter->timeout-currtime));	return 0;	}int timerQueue::set_timer(u_int64_t timeVal, timer_hfunc_t fun, void *dataVal ){#ifdef DEBUG	cout << "timerQueue: set_timer: entered" << endl;#endif	/* add to the timer list */	timer_add(timeVal, fun, dataVal);	/* find the timer with minimum timeout and set the timer for that value */	setLowestTimer(timeVal);	return 0;}int timerQueue::set_timer_first(u_int64_t timeVal, timer_hfunc_t fun, void *dataVal ){#ifdef DEBUG	cout << "set_timer_first: entered" << endl;#endif	/* add to the timer list */	timer_add(timeVal, fun, dataVal);	/* find the timer with minimum timeout and set the timer for that value */	setRealTimer(timeVal);	return 0;}void	timerQueue::setLowestTimer(u_int64_t timeVal){	u_int64_t	currtime = getcurrtime();	struct timerData	*tData;	#ifdef DEBUG	cout << "timerQueue: setLowestTimer: entered " << endl;#endif	list<timer>::iterator	iter;	iter=timerQ.begin();	tData = (struct timerData*) iter->data;#ifdef DEBUG	cout << "setLowestTimer: timer queue size is " << timerQ.size() << endl;	cout << "setLowestTimer: timer type is " << tData->type << endl;	cout << "setLowestTimer: timeVal is " << timeVal << endl;	cout << "setLowestTimer: first entry timeout is " << iter->timeout << endl;	cout << "setLowestTimer: current timeout is " << (currtime+timeVal) << endl;#endif	//if(iter->timeout > (currtime+timeVal))	if(iter->timeout == (currtime+timeVal))	{		/* reset the timer to the timeval timeout */#ifdef DEBUG		cout << "timerQueue: setLowestTimer: resetting timer " << endl;#endif		setRealTimer(timeVal);	}	return;}/* timeout is the absolute time in ms */int	timerQueue::setRealTimer(u_int64_t timeout){	struct itimerval itval;	long	time_sec, time_usec;#ifdef DEBUG	cout << " setRealTimer: entered timeout is " << timeout <<  endl;#endif	time_sec = timeout/1000;	time_usec = (timeout - time_sec*1000)*1000;	itval.it_interval.tv_sec = 0;	itval.it_value.tv_sec = time_sec;	itval.it_interval.tv_usec = 0;	itval.it_value.tv_usec = time_usec;	if (setitimer(ITIMER_REAL, &itval, (struct itimerval *)NULL) < 0) {			cout << "ERROR: setting periodic timer"  << endl;			return -1;	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -