关于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.
休眠的是我经常用的 这个我理解
后面的 加入隔5秒执行一次
那如果5秒之内程序逻辑没执行完 是不是也会继续执行下一轮?说白了 就是timer的可能会有问题?
逻辑没执行完 是不会继续执行下一轮的
执行A; 休眠10秒
隔10秒; 执行A
-------------------timer 比thread要方便. --> 如果你仅是要 每间隔固定时间运行一次某方法的话thread比timer要多功能.你可以当他是一个动态控制 sleep 的线程. 而timer你只能当他是一个静态sleep的线程.由于thread的灵活性, 所以我们在其他主调度线程可以方便的对多条thread进行调度, 比如[生产者消费者模型]范例. 等等等等.
没什么根本差别,不过常用的是System.Threading.Timer
Timer是隔几秒执行一次,不管上次是否执行完?
你说对了,timer不管上次是否执行完,隔几秒执行一次。你可以自己试试看。
是用Thread休眠好?
还是用Timer加一个状态控制好?
http://blog.csdn.net/linux7985/article/details/8013645
-----
另外建议使用自带的计划任务功能,而不要使用服务。这个是最好的~
咩 timer为什么会耗内存,求指教 其实两个都可以实现windows服务,我只是在考虑哪个效率好一些
cpu空闲时间能多一些,占用内存能少一些计划任务有时候达不到效果,计划任务最小间隔是1分钟
像做一些数据操作要求及时性的时候 肯定要求几秒钟执行一次
一个是 System.Windows.Form.Timer
一个是 System.Timers.Timer这3个区别很大的,你最好先用好,要不会出问题
我不是在请教怎么写windows服务 也不是在请教怎么用Timer写windows服务
我是想知道Timer和线程sleep在原理上的区别
以及这两种实现方式的异同及好坏不过还是多谢~~
没什么区别, 看你喜欢怎么用了,不过System.Windows.Form.Timer这个Timer是不太精确的,尽量少用了。
其它的,你想用线程,Sleep还是用Timer,看你自己看高兴了,无所谓,有些人觉的用Timer方便。