定时器问题

System.Threading.Timer  线程计时器:

5个Timer对象:
Timer timer1 = new Timer(new TimerCallback(Proc1),null,0,100)
Timer timer2 = new Timer(new TimerCallback(Proc2),null,0,100)
Timer timer3 = new Timer(new TimerCallback(Proc3),null,0,100)
Timer timer4 = new Timer(new TimerCallback(Proc4),null,0,100)
Timer timer5= new Timer(new TimerCallback(Proc5),null,0,100)


程序在PC机上运行没有任何问题,

但是移到HP服务器上 运行一段时间都是正常的,但是线程数不断增减,过几分钟,程序就停止了

解决办法:
1. 充分压缩每个TimerCallback的处理时间,这种做法需要修改大篇的程序,因为系统在用,修改失败,非常不好办;

2. 使用服务器计时器 System.Timers.Timer  ,他也是多线程的;

    或者使用System.Forms.Timer , 他与用户UI共用一个进程

3.使用异步调用方式

        异步编程主要是针对某些耗时的操作、无需和用户交互、只执行一次无需返回结果等的操作。
用Timer不停的触发,太频繁又耗时,线程池肯定玩完。
如果你的本意不是要定时的不停的调用Proc1/Proc2/Proc3/Proc4/Proc5,而是要一直不停的开着线程分别调用Proc1/Proc2/Proc3/Proc4/Proc5,开五个线程,死循环,不停的处理就可以了,处理一次以后,适当的休眠,保证所有线程都能运行,如:
private void Proc1()
{
  while(flag)  //这样可以在其他地方作某个动作,修改flag=false,使线程停下来
  {....}
}

改为thread1=new thread(new threadstart(proc1))
thread1.start()的形式吧,然后把proc1的代码改为死循环:
while(true)
{
//原来proc1处理代码
Thread.Sleep(100); //等待100毫秒
}
记得程序退出时关闭线程 thread1.close();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值