在Global中使用线程隔时处理任务
2005-11-03 16:28
561 查看
有的时候我们需要隔一段时间做一些处理,可以在Web.Config中使用线程来处理
(书中学习,整理了一下,以下是过5分钟删除一张表的记录)
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using DataBase;
using System.Data.SqlClient;
using System.Web.Security;
using System.IO ;
using System.Threading;
namespace FreightCom
{
/// <summary>
/// Global 的摘要说明。
/// </summary>
public class Global : System.Web.HttpApplication
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
private OnLineUser ou=new OnLineUser();
private UserLoginInfo Login=new UserLoginInfo();
public Global()
{
InitializeComponent();
}
protected void Application_Start(Object sender, EventArgs e)
{
SchedulerAgent.StartAgent();
}
protected void Session_Start(Object sender, EventArgs e)
{
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
protected void Application_Error(Object sender, EventArgs e)
{
}
protected void Session_End(Object sender, EventArgs e)
{
}
protected void Application_End(Object sender, EventArgs e)
{
SchedulerAgent.Stop();
}
#region Web 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
}
#endregion
}
public interface ISchedulerJob
{
void Execute();
}
public class SchedulerConfiguration
{
private int sleepInterval;
private ArrayList jobs=new ArrayList();
public int SleepInterval
{
get{return sleepInterval;}
}
public ArrayList Jobs
{
get {return jobs;}
}
public SchedulerConfiguration(int newSleepInterval)
{
sleepInterval=newSleepInterval;
}
}
public class Scheduler
{
private SchedulerConfiguration configuration = null;
public Scheduler(SchedulerConfiguration config)
{
configuration=config;
}
public void Start()
{
while(true)
{
try
{
foreach(ISchedulerJob job in configuration .Jobs)
{
job.Execute();
}
}
catch{}
finally
{
Thread.Sleep(configuration.SleepInterval);
}
}
}
}
public class SchedulerAgent
{
private static System.Threading.Thread schedulerThread=null;
public static void StartAgent()
{
SchedulerConfiguration config=new SchedulerConfiguration(1000*300);//设置时间,此处为5分钟
config.Jobs.Add(new AlertJob());
Scheduler scheduler=new Scheduler(config);
System.Threading.ThreadStart myThreadStart=new System.Threading.ThreadStart(scheduler.Start);
schedulerThread=new System.Threading.Thread(myThreadStart);
schedulerThread.Start();
}
public static void Stop()
{
if(null!=schedulerThread)
{
schedulerThread.Abort();
}
}
}
public class AlertJob:ISchedulerJob
{
private OnLineUser ou=new OnLineUser();
public void Execute()
{
ou.UserDelOnline();//一个删除的方法
}
}
}
(书中学习,整理了一下,以下是过5分钟删除一张表的记录)
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using DataBase;
using System.Data.SqlClient;
using System.Web.Security;
using System.IO ;
using System.Threading;
namespace FreightCom
{
/// <summary>
/// Global 的摘要说明。
/// </summary>
public class Global : System.Web.HttpApplication
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
private OnLineUser ou=new OnLineUser();
private UserLoginInfo Login=new UserLoginInfo();
public Global()
{
InitializeComponent();
}
protected void Application_Start(Object sender, EventArgs e)
{
SchedulerAgent.StartAgent();
}
protected void Session_Start(Object sender, EventArgs e)
{
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
protected void Application_Error(Object sender, EventArgs e)
{
}
protected void Session_End(Object sender, EventArgs e)
{
}
protected void Application_End(Object sender, EventArgs e)
{
SchedulerAgent.Stop();
}
#region Web 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
}
#endregion
}
public interface ISchedulerJob
{
void Execute();
}
public class SchedulerConfiguration
{
private int sleepInterval;
private ArrayList jobs=new ArrayList();
public int SleepInterval
{
get{return sleepInterval;}
}
public ArrayList Jobs
{
get {return jobs;}
}
public SchedulerConfiguration(int newSleepInterval)
{
sleepInterval=newSleepInterval;
}
}
public class Scheduler
{
private SchedulerConfiguration configuration = null;
public Scheduler(SchedulerConfiguration config)
{
configuration=config;
}
public void Start()
{
while(true)
{
try
{
foreach(ISchedulerJob job in configuration .Jobs)
{
job.Execute();
}
}
catch{}
finally
{
Thread.Sleep(configuration.SleepInterval);
}
}
}
}
public class SchedulerAgent
{
private static System.Threading.Thread schedulerThread=null;
public static void StartAgent()
{
SchedulerConfiguration config=new SchedulerConfiguration(1000*300);//设置时间,此处为5分钟
config.Jobs.Add(new AlertJob());
Scheduler scheduler=new Scheduler(config);
System.Threading.ThreadStart myThreadStart=new System.Threading.ThreadStart(scheduler.Start);
schedulerThread=new System.Threading.Thread(myThreadStart);
schedulerThread.Start();
}
public static void Stop()
{
if(null!=schedulerThread)
{
schedulerThread.Abort();
}
}
}
public class AlertJob:ISchedulerJob
{
private OnLineUser ou=new OnLineUser();
public void Execute()
{
ou.UserDelOnline();//一个删除的方法
}
}
}
相关文章推荐
- C#使用后台线程BackgroundWorker处理任务的总结
- 使用 Rx 的计算和最大化线程处理并行任务
- Global中使用线程隔时执行一项任务
- 使用后台线程BackgroundWorker处理任务的总结
- Global中使用线程隔时执行一项任务(ZT)
- 线程基础:多任务处理(12)——Fork/Join框架(基本使用)
- Global中使用线程隔时执行一项任务
- 在Global中使用线程隔时执行一项任务
- Symbian OS中使用Active Object 而不是线程来处理多任务的原因
- C# 使用 Task 替换 ThreadPool ,异步监测所有线程(任务)是否全部执行完毕
- Android异步任务处理之AsyncTaskLoader的使用
- 多线程异步编程(2):创建多个线程执行任务,同时更新进度条,使用观察者模式,利用事件通知界面更新。移除对Form的引用,彻底解除界面与逻辑的耦合
- 在tornado中使用celery实现异步任务处理之二
- 使用委托及控件的invoke方法处理窗体控件的跨线程访问
- Android性能优化之使用线程池处理异步任务
- 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。
- GCD中使用dispatch_after函数延迟处理任务
- 精选20道Java多线程面试题并有答案! 互联网IT技术 2017-10-14 00:02 1. 多线程使用的优缺点? 优点: (1)多线程技术使程序的响应速度更快 (2)当前没有进行处理的任务
- Spring异步任务处理,@Async的配置和使用
- Android 性能优化之使用线程池处理异步任务