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

📄 scheduler.cpp

📁 multi-line Adjunct Communication Server
💻 CPP
字号:
// Copyright (C) 1999-2000 Open Source Telecom Corporation.//  // This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.// // This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// // You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.//// As a special exception to the GNU General Public License, permission is// granted for additional uses of the text contained in its release// of ACS as noted here.//// This exception is that permission is hereby granted to link ACS with// the Pika MonteCarlo static libraries to produce a executable image// without requiring MonteCarlo itself to be supplied in source form so// long as each source file so linked contains this exclusion.//// This exception does not however invalidate any other reasons why// the resulting executable file might be covered by the GNU General// public license or invalidate the licensing requirements of any// other component or library.//// This exception applies only to the code released by OST under the// name ACS.  If you copy code from other releases into a copy of// ACS, as the General Public License permits, the exception does not// apply to the code that you add in this way.  To avoid misleading// anyone as to the status of such modified files, you must delete// this exception notice from them.//// If you write modifications of your own to ACS, it is your choice// whether to permit this exception to apply to your modifications.// If you do not wish that, delete this exception notice, at which// point the terms of your modification would be covered under the GPL// as explicitly stated in "COPYING".#include <config.h>#include <scheduler.h>#include <trunkmap.h>#include <stdlib.h>int Scheduler::Load(void){	static char	*days[7] = {"su", "mo", "tu", "we", "th", "fr", "sa"}; 	Trunkmap *map;	time_t now;	struct tm *dt;	char	lbuf[129];	char	*table, *day, *start, *cp;	char	*p;	int	hr, min;	int	lhr = 24;	int	lmin = 0;	int	id;	int	t1, t2, td;	time(&now);	dt = localtime(&now);	fseek(fp, 0l, SEEK_SET);		for(;;)	{		fgets(lbuf, sizeof(lbuf) - 1, fp);		if(feof(fp))			break;		p = lbuf;		while(*p == ' ' || *p == '\t' || *p == '\n')			++p; 		if(!*p || *p == '#' || *p == ';')			continue;		table = strtok(p, " \t\n");		day = strtok(NULL, " \t\n");		start = strtok(NULL, " \t\n");		cp = strtok(NULL, " \t\n");		if(!cp)			continue;		p = strtok(day, ",");		while(p)		{			if(*p == '*')				break;			if(!strnicmp(p, days[dt->tm_wday], 2))				break;			p = strtok(NULL, ",;");		}		if(!p)			continue;		if(*start == '*')		{			hr = 0;			min = 0;		}		else		{			hr = atoi(start);			min = atoi(strchr(start, ':') + 1);		}		if(hr < lhr || (hr == lhr && min < lmin))			if(hr > dt->tm_hour || (hr == dt->tm_hour && min > dt->tm_min))			{				lhr = hr;				lmin = min;			}		if(hr > dt->tm_hour)			continue;		if(hr == dt->tm_hour && min > dt->tm_min)			continue;		if(*table == '*')		{			map = Trunkmap::firstmap;			while(map)			{				map->setSchedule(SCHED_DAILY, cp);				map = map->nextmap;			}			continue;		}		p = strtok(table, ",;");		while(p)		{			id = atoi(p);			p = strtok(NULL, ",;");			map = Trunkmap::firstmap;			while(id-- && map)				map = map->nextmap;			if(!map)				continue;			map->setSchedule(SCHED_DAILY, cp);		}	}	td = (lhr * 60) + lmin - (dt->tm_hour * 60) - dt->tm_min;	if(td > 15)		td = 15;	if(td < 1)		td = 1;	return td;	}Scheduler::Scheduler(char *path, int pri) : Thread(NULL, pri), Mutex(){	strcpy(schedpath, path);	interval = 0;};Scheduler::~Scheduler(void){	Terminate();	if(fp)		fclose(fp);}void Scheduler::Initial(void){	fp = fopen(schedpath, "r");	setCancel(THREAD_CANCEL_DEFERRED);}void Scheduler::Run(void){	for(;;)	{		if(!fp)			Initial();		if(fp && interval < 1)		{			ENTER_CRITICAL			interval = Load();			LEAVE_CRITICAL		}		else			--interval;		sleep(60);			}}

⌨️ 快捷键说明

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