根据给定起止时间,完成下载任务(大概类似于日历日程这种)

本文介绍了一个用于指定时间段内下载图像文件的管理器实现方法,包括处理时区差异、配置读取、线程池初始化及具体下载逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


//指定下载 for emergency, like power off
//TODO: file nam e need  to bue modify
void GridImgDownloadMgr::DesignateDownLoad( UtilsSystem::PosixTime beginTime , UtilsSystem::PosixTime endTime )
{
	// Assign begin time and end time for missing image.
	if (beginTime >= endTime)
	{
		return;
	}

	// Correct BETime according timezone.
	UtilsSystem::TimeDuration backSpan(TIME_DIFFERENCE, 0, 0);
	beginTime -= backSpan;
	endTime -= backSpan;

	// Independent from GridImg Appliation.Need read config.
	if (!m_bStart)
	{
		m_pAccount = m_pConfig->Read("DownLoad", "user");
		m_pPassword = m_pConfig->Read("DownLoad", "passwd");


		m_pThreadPool = UtilsSystem::ThreadpoolPtr(new UtilsSystem::Threadpool(24));
		m_pThread = boost::make_shared<UtilsSystem::Thread>(boost::bind(&boost::asio::io_service::run, m_pIOService));
		if ( !m_httpClient.Initialize())
		{
			LOG4CXX_ERROR(m_pLogger, "HTTP client initial fail.");
		}

		GridImgActorMangerSingleton::GetMutableInstance()->SetLogger(m_pLogger);
		GridImgActorMangerSingleton::GetMutableInstance()->SetConfiguration(m_pConfig);
		GridImgActorMangerSingleton::GetMutableInstance()->Initialize();
		LOG4CXX_INFO(m_pLogger, "Grib image download manager start wihtout app.");
	}
	

	int bHour = UtilsSystem::DateTimeUtils::GetDateTimeUnit(beginTime, HOUR);
	int bDay = UtilsSystem::DateTimeUtils::GetDateTimeUnit(beginTime, DAY);
	int bMonth = UtilsSystem::DateTimeUtils::GetDateTimeUnit(beginTime, MONTH);
	int bYear = UtilsSystem::DateTimeUtils::GetDateTimeUnit(beginTime, YEAR);
	int eHour = UtilsSystem::DateTimeUtils::GetDateTimeUnit(endTime, HOUR);
	int eDay = UtilsSystem::DateTimeUtils::GetDateTimeUnit(endTime, DAY);
	int eMonth = UtilsSystem::DateTimeUtils::GetDateTimeUnit(endTime, MONTH);
	int eYear = UtilsSystem::DateTimeUtils::GetDateTimeUnit(endTime, YEAR);


	int dayList[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

	int y = bYear;
	int m = bMonth;
	int d = bDay;
	int h = bHour;

	bool flagY = true;
	bool flagM = true;
	bool flagD = true;
	bool flagH = true;


	//-- logic
	do{
		flagM = true;
		if (y%4 == 0)
		{
			dayList[2] = 29;
		}else
		{
			dayList[2] = 28;
		}
		do{
			flagD = true;
			do{

				flagH = true;
				do{

					std::string urlFrmtStr = m_pConfig->Read("Download", "download_url");
					boost::format frmt(urlFrmtStr);
					frmt %y %m %d %(h*100) %y %m %d %(h*100);
					std::string urlStr = str(frmt);
					// Save path string.
					std::string filePathStr = m_pConfig->Read("SaveDir","orig_dir");
					boost::filesystem::path filePath(filePathStr);

					boost::format fileFrmt(PIC_NAME_FORMAT);
					fileFrmt %y %m %d %(h*100);
					std::string fileStr;
					fileStr = str(fileFrmt);

					filePath.append(fileStr + PIC_SUFFIX);
					m_pThreadPool->schedule(boost::bind(&GridImgDownloadMgr::DownloadGribImg, this, urlStr, filePath.string()));
					if ( y==eYear&m==eMonth&d==eDay&&h>=eHour || h++>=23)
					{
						flagH = false;
					}

				}while (flagH);
				h = 0;
				if ( y==eYear&m==eMonth&d==eDay || d++>=dayList[m] )
				{
					flagD = false;
				}
			}while(flagD);
			d = 1;
			if ( y==eYear&m==eMonth || m++>=12)
			{
				flagM = false;
			}
		}while(flagM);
		m = 1;
		if ( y++ >= eYear )
		{
			flagY = false;
		}
	}while (flagY);
	//--logic

	return;
}
忽略了2000,2400这种不是闰年的情况,因为根本用不上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值