| 每到***时刻 | 每隔***时间 | |
| 完整 | ffff-ff-ff ff:ff:ff 或 ff-ff-ff ff:ff:ff | -99--99--99 -99:-99:-99 |
| 日期部分 | ffff-ff-ff 或 ff-ff-ff | -99--99--99 |
| 时间部分 | ff:ff:ff 或 ff:ff:ff | -99:-99:-99 |
| 时间简写 | ff:ff 或 ff:ff | -99:-99 |
public class TimePointConverter
{
//其他成员
private int[] DateTimeFixBuilder(string timeStr)
{
int[] result = null;
string[] dtArray = timeStr.Split();
string[] dateArray = dtArray[0].Split('-');
string[] timeArray = dtArray[1].Split(':');
uint year,month,date;
uint hour, minute, second;
uint.TryParse(dateArray[0], out year);
uint.TryParse(dateArray[1], out month);
uint.TryParse(dateArray[2], out date);
uint.TryParse(timeArray[0], out hour);
uint.TryParse(timeArray[1], out minute);
uint.TryParse(timeArray[2], out second);
//return InnerFixBuilder(year, month, date, hour, minute, second);
result = new int[] { (int)year, (int)month, (int)date, (int)hour, (int)minute, (int)second };
return result;
}
//其他成员
}
public class SleepTimeProvider
{
//其他成员
public TimeSpan InnerFixBuilder(uint year, uint month, uint date, uint hour, uint minute, uint second)
{
uint[] uintTimeArray = new uint[6] { year, month, date, hour, minute, second };
int[] intNowArray = new int[6]
{
DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day,
DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second
};
int[] intTimeArray = new int[6];
intTimeArray[0] = uintTimeArray[0] == 0 ? -DateTime.Now.Year : (int)uintTimeArray[0];
for (int i = 1; i < uintTimeArray.Length; i++)
{
intTimeArray[i] = intTimeArray[i - 1] < 0 && uintTimeArray[i] == 0 ?
-intNowArray[i] : (int)uintTimeArray[i];
}
DateTime goalTime = new DateTime(Math.Abs(intTimeArray[0]),
Math.Abs(intTimeArray[1]),
Math.Abs(intTimeArray[2]),
Math.Abs(intTimeArray[3]),
Math.Abs(intTimeArray[4]),
Math.Abs(intTimeArray[5]));
if (goalTime < DateTime.Now)
{
int max = -1;
for (int i = intTimeArray.Length - 1; i >= 0; i--)
{
if (intTimeArray[i] < 0 && i > max)
{
max = i;
intTimeArray[i]--;
}
intTimeArray[i] = Math.Abs(intTimeArray[i]);
}
goalTime = new DateTime(Math.Abs(intTimeArray[0]),
Math.Abs(intTimeArray[1]),
Math.Abs(intTimeArray[2]),
Math.Abs(intTimeArray[3]),
Math.Abs(intTimeArray[4]),
Math.Abs(intTimeArray[5]));
}
return goalTime - DateTime.Now;
}
//其他成员
}
public bool Pause()
{
if (actionThread == null) return false;
if (actionThread.ThreadState == (System.Threading.ThreadState.Running | ThreadState.Background) ||
actionThread.ThreadState == (System.Threading.ThreadState.WaitSleepJoin | ThreadState.Background))
{
actionThread.Suspend();
return true;
}
return false;
}
public class BaseCycleMission:ICycleMission
{
//其他成员
protected void BuildMainAction(string normalCycle, string overTimeCycle, object overTimeDelegate, bool isSleepBefore,bool isInclude)
{
mainAction = () =>
{
TimeSpan sleepTime=TimeSpan.MinValue;
bool result = true;
TimePointConvert.CircleType type ;
#region 提前休眠
if (isSleepBefore)
{
type = TimePointConvert.Default.PraseType(normalCycle);
if (type == TimePointConvert.CircleType.Interval)
sleepTime = SleepTimeProvider.Defult.InnerIntervalBuilder(
TimePointConvert.Default.ConvertCircle(normalCycle));
else
sleepTime = SleepTimeProvider.Defult.InnerFixBuilder(
TimePointConvert.Default.ConvertCircle(normalCycle));
if (sleepTime.TotalMilliseconds > 0)
Thread.Sleep(sleepTime);
}
#endregion
while (true)
{
#region 计算时间
if (isInclude)
{
if (result)
{
type = TimePointConvert.Default.PraseType(normalCycle);
type = TimePointConvert.Default.PraseType(overTimeCycle);
sleepTime = type == TimePointConvert.CircleType.Interval ?
SleepTimeProvider.Defult.InnerIntervalBuilder(
TimePointConvert.Default.ConvertCircle(overTimeCycle)) :
SleepTimeProvider.Defult.InnerFixBuilder(
TimePointConvert.Default.ConvertCircle(overTimeCycle));
}
}
#endregion
#region 执行方法
if(overTimeDelegate is OverTimeCycleDelegate)
result = (overTimeDelegate as OverTimeCycleDelegate).Invoke();
else
{
(overTimeDelegate as CycleDelegate).Invoke();
result = true;
}
#endregion
#region 计算时间
if (!isInclude)
{
if (result)
{
type = TimePointConvert.Default.PraseType(normalCycle);
sleepTime = type == TimePointConvert.CircleType.Interval ?
SleepTimeProvider.Defult.InnerIntervalBuilder(
TimePointConvert.Default.ConvertCircle(normalCycle)) :
SleepTimeProvider.Defult.InnerFixBuilder(
TimePointConvert.Default.ConvertCircle(normalCycle));
}
else
{
type = TimePointConvert.Default.PraseType(overTimeCycle);
sleepTime = type == TimePointConvert.CircleType.Interval ?
SleepTimeProvider.Defult.InnerIntervalBuilder(
TimePointConvert.Default.ConvertCircle(overTimeCycle)) :
SleepTimeProvider.Defult.InnerFixBuilder(
TimePointConvert.Default.ConvertCircle(overTimeCycle));
}
}
#endregion
if (sleepTime.TotalMilliseconds > 0)
Thread.Sleep(sleepTime);
}
};
}
//其他成员
}
RunAllMission() RunAllIncludeCycleMission() RunAllExceptCycleMission() RunMissionAmong(params string[] missionNames) RunMissionExcept(params string[] missionNames)
private void CallAction(IEnumerable<ICycleMission> missionCollection,Action method)
{
if (missionCollection == null || method == null||missionCollection.Count()==0) return;
foreach (ICycleMission item in missionCollection)
{
method.Method.Invoke(item, null);
}
}
public void RunAllExceptCycleMission()
{
CallAction(this.Values.Where(c => c is ExceptCycleMission), BaseCycleMission.Default.RunMission);
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有