想做一个多线程定时触发器,是一个手上编写的外挂用的,作用就是定时执行某个任务,而且要多线程的。求高手给个思路,尤其是多线程那块 因为还需要在用户界面上体现数据。
解决方案 »
- 小妹请教下C#socket服务器端byte[]修改的问题
- C#调用C++的DLL用StringBuilder获取返回值,不指定StringBuilder大小会出现乱码
- 每人都有分,帮忙看下,如何将这段socket基础的代码改下,谢谢.
- share 不同单位的计算
- .net中数据库的问题
- 如何实现如果用户点击的不是这个控件,控件就自动隐藏呐。
- 有谁能给我银行系统的源代码啊?
- c#程序 DirectoryEntry类的一个问题,大哥们帮帮忙啊!
- 如何修改List成员的内容?
- 我用的一个DBHELP的数据库控制类,上线后就会报连接出错,求解?
- 有关XPTable的设置以及事件问题
- 【急】使用c#产生数据发往指定服务器
/// <summary>
/// 主线程
/// </summary>
private void Main()
{
//循环运行
while (operatingStatus)
{
//每秒执行,计时
Thread.Sleep(1000);
lock (programList)
{
//读取任务列表并计时。
foreach (UserProgram program in programList)
{
if (program != null)
{
//到点
if (!program.HasCompleted & program.TimeLater <= 0)
{
//将任务放入执行队列
lock (executeList)
{
executeList.Enqueue(program);
}
program.HasCompleted = true;
}
//计时
program.TimeLater--;
}
}
}
}
} /// <summary>
/// 执行任务线程。
/// </summary>
private void Execution()
{
//循环运行
while (operatingStatus)
{
//休眠0.1秒
Thread.Sleep(100);
//上个任务结束前休眠
while(!completed) Thread.Sleep(10);
//执行队列中的任务>0时
if (executeList.Count > 0)
{
//任务完成标志
completed = false;
//读取任务。
UserProgram program;
lock (executeList)
{
program = executeList.Dequeue() as UserProgram;
}
//执行任务
if (program != null)
{
lock (owerUser)
{
switch (program.Program)
{
case ProgramType.UserLogin:
session.ExecutionUserLogon();
if (Operation != null) Operation(operatingStatus, null);
break;
case ProgramType.HarvestAllKey:
session.ExecutionHarvestAllKey();
break;
case ProgramType.MonarchInfo:
session.GetMonarchInfo();
break;
case ProgramType.DailyMission:
session.ExecutionDailyMission();
break;
case ProgramType.GainAllHonorGift:
session.ExecutionGainAllHonorGift();
break;
case ProgramType.OneselfWater:
session.ExecutionOneselfWater();
break;
case ProgramType.OneselfFeed:
session.ExecutionOneselfFeed();
break;
case ProgramType.HarvestTree:
session.ExecutionHarvestTree();
break;
case ProgramType.HitEggKey:
session.ExecutionHitEggKey();
break;
case ProgramType.Luck:
session.ExecutionLuck();
break;
case ProgramType.Building:
session.ExecutionBuildingLevelUp();
break;
default:
break;
}
}
}
else { completed = true; }
}
}
} /// <summary>
/// 任务完成事件。
/// </summary>
/// <param name="programList">任务列表</param>
private void session_SessionCompleted(UserProgramCollection programList)
{
if (programList.Count > 0)
{
lock (this.programList)
{
this.programList.AddRange(programList);
try
{
this.programList.Sort(delegate(UserProgram x, UserProgram y) { return x.TimeLater.CompareTo(y.TimeLater); });
}
catch { }
}
}
//任务完成标志
completed = true;
}