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);
  • 相关阅读:
    ldconfig和ldd用法
    Linux上ld和ld.so命令的区别
    一维二维码的提取、识别和产生
    最大轮廓和投影
    如何做出半透明和闪光效果
    马赫效应和应对方法
    钢管识别项目1
    钢管识别项目2
    选择轮廓(select_shape)
    压板识别项目分析
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/1605655.html
Copyright © 2011-2022 走看看