zoukankan      html  css  js  c++  java
  • 文件传输(三)关于计时器

    文件传输设计成在后台执行的Windows Services,在配置文件中定义执行数据上传下载的时间,这样就需要定义个Timer来检查指定的时间是否到达,以便执行相应的操作,在.NET中有几个类库中有Timer的定义,具体的内容可以查看MSDN。

    我使用了空间System.Timers里的Timer,Timer可以设置时间间隔,每隔一定的时间执行由ElapsedEventHandler定义的事件,由于网络不稳定,所以断线的情况时有发生,所以我们要定义一个时间段,在这个时间段内,每隔一定的时间去检查一下是否有文件需要上传,但是由于网络传输的不确定性,隔多长时间去检查就是个问题了,由于System.Timers的Timer是多线程的,所以如果不加以处理会产生资源竞争的情况,比如定义了Timer的Interval是360000,即每隔6分钟去检查一下是否有文件需要上传或下载,如果上一个Timer所触发的ElapsedEventHandler事件还没处理完,又再次触发ElapsedEventHandler时间,就会出问题了,需要加把锁,通过System.Threading中的Interlocked去实现。
    定义变量locaVar的值为0时执行事件处理程序对应的代码,在代码开始执行时

    if (0 == Interlocked.Exchange(ref lockVar, 1))

    执行完毕后,重置lockVar的值

    //释放锁
                        Interlocked.Exchange(ref lockVar, 0);
  • 相关阅读:
    C# 中的var关键字
    sql中去掉换行符和回车符
    Linq之旅:Linq入门详解(Linq to Objects)
    c# for 和 foreach
    c# Dictionary
    ASP.NET Web.config学习
    c# 装箱与拆箱的概念
    c# List集合学习
    Index was out of range
    C# double保留四位小数
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/1605655.html
Copyright © 2011-2022 走看看