之前写服务 一直用线程休眠的形式
就是执行完一轮服务 休息个几秒钟 再继续执行下一轮今天看到有用Timer.Elapsed来实现的哪个好?不太了解Timer和Sleep的实现机制大神给指点下

解决方案 »

  1.   


    休眠的是我经常用的 这个我理解
    后面的 加入隔5秒执行一次 
    那如果5秒之内程序逻辑没执行完 是不是也会继续执行下一轮?说白了 就是timer的可能会有问题?
      

  2.   

    timer有两个:一个是form的,一个是thread的
    逻辑没执行完 是不会继续执行下一轮的
      

  3.   

    不同情况下用不同的,如果是多线程,肯定就用thread.
      

  4.   

    如果在函数内暂停,就用sleep.否则就用timer(线程程)
      

  5.   

    这位兄弟搞笑了. 呵呵呵.
    执行A; 休眠10秒
    隔10秒; 执行A
    -------------------timer 比thread要方便. --> 如果你仅是要 每间隔固定时间运行一次某方法的话thread比timer要多功能.你可以当他是一个动态控制 sleep 的线程.  而timer你只能当他是一个静态sleep的线程.由于thread的灵活性, 所以我们在其他主调度线程可以方便的对多条thread进行调度, 比如[生产者消费者模型]范例. 等等等等.
      

  6.   

    感觉timer要好一些,但是用起来没sleep方便
      

  7.   

    都差不多,如果Timer不在运行,又怎么会触发事件,和你和线程Sleep差不多,
    没什么根本差别,不过常用的是System.Threading.Timer
      

  8.   

    那和我一开始说的是一样的吧?
    Timer是隔几秒执行一次,不管上次是否执行完?
      

  9.   


    你说对了,timer不管上次是否执行完,隔几秒执行一次。你可以自己试试看。
      

  10.   

    嗯 测试了下 Timer的确是不管上次是否执行完那我有个问题 服务的话 
    是用Thread休眠好?
    还是用Timer加一个状态控制好?
      

  11.   

    给个推荐一个控件吧!
    http://blog.csdn.net/linux7985/article/details/8013645
      

  12.   

    为什么需要用sleep?是因为线程闲着吗?如果是因为线程空闲就sleep.怎么知道sleep完之后线程就会有事做?一般来说真正的程序很少需要用sleep的。
      

  13.   

    关于Timer和sleep的问题我是这样理解的,抛开算不算打炮事件,timer和sleep实现的机理是一致的,都是通过系统中断通统内核让本线程挂起,不再享有cpu时间,直到得到系统唤醒通知,linux下通过signal来实现唤醒,并重新分配cpu时间,而windows则多了Message机制,如果没有window handler的情况,window也同样采用signal进行进程通信。基于上述的理解,如果是服务器程序只是响应外部事件才需要做出反应,所以完全可以考虑主线程pause,然后利用socket在子线程recv进行激活,那如果是定时服务那么2者区别不大,但在用timer时需小心,最好在callback时加入timer.Enable=false,完成后再enable,否则当事务时间超过间隔时间会产生并发,而sleep则可确定在一个线程上运行。May it helps.
      

  14.   

    我都是用的线程,timer机制真的挺耗内存的。
    -----
    另外建议使用自带的计划任务功能,而不要使用服务。这个是最好的~
      

  15.   


    咩 timer为什么会耗内存,求指教 其实两个都可以实现windows服务,我只是在考虑哪个效率好一些
    cpu空闲时间能多一些,占用内存能少一些计划任务有时候达不到效果,计划任务最小间隔是1分钟 
    像做一些数据操作要求及时性的时候 肯定要求几秒钟执行一次
      

  16.   

    你吧你 windows Service 代码 贴出来, 看下, 要记得用 对 Timer 还有就是 进入Timer 时 吧 Timer 停掉, 最后一行在启用,C# 中有 3个 Timer 一个是 System.Threading.Timer
    一个是 System.Windows.Form.Timer
    一个是 System.Timers.Timer这3个区别很大的,你最好先用好,要不会出问题
      

  17.   



    我不是在请教怎么写windows服务 也不是在请教怎么用Timer写windows服务
    我是想知道Timer和线程sleep在原理上的区别
    以及这两种实现方式的异同及好坏不过还是多谢~~
      

  18.   


    没什么区别, 看你喜欢怎么用了,不过System.Windows.Form.Timer这个Timer是不太精确的,尽量少用了。
    其它的,你想用线程,Sleep还是用Timer,看你自己看高兴了,无所谓,有些人觉的用Timer方便。