Window下编程:实现规定时间执行某任务的框架


前言

这篇文章主要记录的是编程中,总会遇到一些逻辑是,在规定或者固定的时间内,达到某种条件或者要求去做一些事情,以下就是自己记录window编程固定时间内Todo something 的模板,具体内容根据实际情况而定。


一、使用步骤

1.初始化

struct time_list{
	int nModule;
	int nSn;
	int nSpan;
	time_t	tSynTime ;
	bool    bYxAccess;
	int     nDeviceType;
};
std::vector<time_list> time_lst;

	ZeroMemory(pdataPath,512) ;
	strcpy(pdataPath,pszPath) ;
	strcat(pdataPath,"todosomething.csv") ;
	int nLine = 0;
	if(dataApt.Open(pdataPath))
	{
		DAPOS pos = dataApt.GetHeadPosition() ;
		while(pos)
		{
			content = dataApt.GetNext(pos) ;
			time_list l;
			l.nDeviceType = atoi(content[0].szContent);			
			l.nSn = atoi(content[1].szContent);
			l.nSpan = atoi(content[2].szContent);
			l.nModule = 0;
			l.bYxAccess = false;
			nLine++;
			
			time_lst.push_back(l);
			
		}
		dataApt.Close() ;
	}
	else
	{		
		strcpy(m_tishi,"打开 文件失败!") ;
		CLogable::Show(m_tishi,(DWORD)strlen(m_tishi)) ;
		return false ;
	}

2.读入数据

将程序封装为一个函数。
StartAutoReset(3,pbyFrame[0],nSoeNum);

void StartAutoReset(int type ,int module, int soenum)
{
	int nSize =time_lst.size();
	int k;
	for (k=0;k<nSize;k++)
	{
		if (time_lst[k].nSpan == 0)
		{
			continue;
		}
		if(time_lst[k].nDeviceType == type &&  time_lst[k].nSn == soenum )
		{
			time(&time_lst[k].tSynTime);
			time_lst[k].bYxAccess = true;
			time_lst[k].nModule = module;
			//SYSTEMTIME st;
			//GetLocalTime (&st);
			//char szMsg[1024];
			//ZeroMemory(szMsg, sizeof(szMsg));
			//sprintf (szMsg, "开始计时时间:%04d-%02d-%02d %02d:%02d:%02d.%03d!", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
			//CLogable::Show(szMsg, strlen(szMsg)+1);
		}

	}
}

3.判定是否达到要求Todo Something

UINT DataScanThread(void *lp)
{	
	CProtocol *p = (CProtocol*)lp;
	int k; 
	while (!p->m_bQuitScanThread)
	{
		time_t ctime ;
		time(&ctime);
		char szInfo[256];
		int nSize =p->time_lst.size();
		
		for (k=0;k<nSize;k++)
		{
			if (p->time_lst[k].nSpan == 0)
			{
				continue;
			}
			if (p->time_lst[k].bYxAccess)
			{
				if (ctime - p->time_lst[k].tSynTime > p->time_lst[k].nSpan)
				{				
					int nPassTime = ctime-p->time_lst[k].tSynTime;						
					p->time_lst[k].bYxAccess = false; 
					//........Todo something
				
					wsprintf (szInfo, "Todo something:经过的时间:%d, module:%d,%d号sn, %d status, %d年%d月%d日%d时%d分%d秒%d毫秒", nPassTime,p->time_lst[k].nModule, p->time_lst[k].nSn, soe.soe_buf[10],st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds,nPassTime);
									

					
					
				}
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值