日期:2014-05-19  浏览次数:21031 次

周期性执行某个功能,用哪一种方法好?(Timer、Sleep、WaitOne)
1.Timer

2.Thread.Sleep

3.ManualResetEvent.WaitOne

4.其它?


Sleep和WaitOne的时间长度有没有限制?比如我要阻塞1个月........呵呵

大家喜欢用哪种方法?顺便说说理由哈

------解决方案--------------------
个人喜欢用Thread.Sleep,用timer的话,多几个这种操作,就要好几个timer。ManualResetEvent.WaitOne这个没用过。

------解决方案--------------------
还可以做成服务
------解决方案--------------------
oracle 有可以生成SQL 语句,交给job 定期执行.
本地程序就不用去管了.
------解决方案--------------------
Thread.Sleep,其他的没怎么用过,不好说
------解决方案--------------------
比如我要阻塞1个月

这个不好说...
不过一般们都是用timer..和Thread.Sleep
------解决方案--------------------
windows不是有个计划任务嘛?
------解决方案--------------------
你说周期性执行一个操作,我想必定是要让执行任务的线程延时一个周期然后再做下边的工作。

Thread.Sleep就是阻塞一个线程一段时间,一般不要去让一个线程阻塞太长的时间,因为在Sleep过程中,你就完全失去对这个线程的控制了。

WaitOne不是用在周期性操作的,而是用在线程同步的延时操作。

最好是保持线程的主循环,在循环中判断上次执行与现在的时间的TimeSpan,再决定是不是执行,中间可以适当的Sleep。
------解决方案--------------------
我写了个Windows Performance Counter之类的程序,如Window本身自带的Perfmon.exe差不多,用的是Sleep.我觉得Sleep和timer应该是同一种东西的。是Sleep包装了timer ?忘高人指点。我想都一样,重点是控制不要多发同一Counter的线程。
------解决方案--------------------
阻塞一个月,你的方案如果选择使用Sleep或者Timer直接定时一个月的话,岂不是玩完

这种方式的定时,需要做一个任务列表,然后轮询查看是否该执行这个任务了


------解决方案--------------------
建议Timer
道理很简单,一个月内要是停电关机了,我看你怎么sleep&wait出一个月
但并不是用Timer阻塞一个月,一小时一取时间满足时间要求就可以执行了
时间对比出一个月应该很简单吧
------解决方案--------------------
服务比较好
------解决方案--------------------
WaitOne(1000,true)
比较好,等1秒没反应就退,有反应就干完.

------解决方案--------------------
Timer是线程的简单封装

ManualResetEvent 其实也是一样的...
------解决方案--------------------
按照我的实际经验来说,用timer
------解决方案--------------------
个人喜欢用sleep! 如果只是简单到定时执行一个函数那就用timer吧
------解决方案--------------------
sleep,理由?我喜欢啊,呵呵.
------解决方案--------------------
不管用什么也不要阻塞一个月呀,应该用一个线程每一段时间(1分或10秒)检测是否于设定时间匹配,然后执行操作。你阻塞一个月要是中间进程死了,或者直接程序挂了。不就没救了。
------解决方案--------------------
timer..和Thread.Sleep多,
不过Thread.Sleep有时会卡死,只好用TIMER
有关Form的,就智能用Form.timer了
------解决方案--------------------
使用Timer设定一个一分钟一次的轮巡,未执行事件在1分钟内的就开一个线程启动,然后Mark那个事件为“执行”。
------解决方案--------------------
阻塞1个月。。。真酷毙了,用timer隔一小段读一次吧。sleep,waitone这些就不要用了,一个月啊,老兄,一个月!