求一程序思路,大家请进。。。。。。。 想实现类似闹钟的功能,设定比如6:00则弹出MessageBox如果放一个Timer控件的话,一直触发一直触发很浪费系统资源有什么好一点的思路?系统到6:00触发一次可能不? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如现在我们决定如何为timer的Interval值,我们计算现在时间跟6:00之间的差距的就好了,就可以设置好timer的Interval了!还用什么一直触发? 楼上没听明白意思吧。如果他是在18:00设定的,你设置Interval值为多少如果他是在19:00设定的,你设置Interval值为多少如果程序设定完了关闭,那你的Interval值又为多少 如果放一个Timer控件,间隔为1秒,不就是一直触发一直触发么每次启动都算一算!?这样科学!? 其实根本不对的。那个5颗星的就是个智障如果我在5点启动程序,而闹钟是在6点响,那么Timer的间隔就是1小时但是请问你,到了6点你打算把Timer控件停了还是不停。如果不停那么每隔一个小时响一次如果停到,难道这个闹钟程序今天响,明天就不响了!? 可设1分钟触发一次,或更长。private Datetime datetime=Datetime.now;//这句放在if(datetime.Hour.ToString()=="6"){ MessageBox.show("6点整");} 5颗星说得有道理呀。。如果在5点启动程序,而闹钟是在6点响,那么Timer的间隔就是1小时6点响后你应该再修改Interval的值的 如果在程序的运行过程中修改了对于系统时间进行了调整怎么办?5星的方法貌似还是不太方便。看看这样可以不。在每次触发timer事件的时候,计算当前时刻与标准时刻之间的时间差异,随着时间差值的减少对于timer的Interval属性进行动态的修改,乘以一个固定系数,随着差值事件的减少timer事件触发的会越来越频繁,在快到标准时刻时会变成1s进行一次检查。不过这个思路也存在缺陷:如果对于系统时间进行调整的话,程序是不会自动识别的。继续跟帖..... 不会浪费资源,占有的内存和CPU很少,运行试试就知道了 只是多加一个WM_TIMER消息嘛,问题不会太大的,Windows接收的消息还少吗? 应该是这样的意思,如果距离6:00很远的话,interval值设置大一点,靠经的话,就1s一次. 完全没有必要,计算从现在开始到指定的时间,还需要多少时间,计算出来后,直接休眠到那个时候,醒来就提醒。提醒用MessageBox来提醒,这样,线程会中止直到MessageBox被Click可以参考一下,这个C#开发系统服务时用的定时器组件 sp1234的思路是对的,只是Timer的Interval似乎无法设为24小时(System.Timer.Timer),上限是35分钟左右,其他的Timer没细看,印象中其他Timer的计时更不准确。另外Timer的精度也是个问题,计时未必准确,受外界影响比较大。我觉得可以把这个Interval用二分来调整,比如启动时,算好距离6点还有多少秒,>70分钟,就设为35分钟,<70分钟,就设为剩余时间的一半,精确到秒应该就可以了,每次Timer触发时调整自身的Interval 不对啊 ,这个态度有点不对啊 闹钟 ,闹啊 ,每天都闹 ,那就写个win计划任务,用vbs 写个执行的脚本,然后系统自己去闹吧,不管你程序启动不启动 把程序放到Windows的任务管理器里 很久不搞VB了 好像有一个NEW 是获取当前时间的 不用任务计划的话while就行了 搞这么麻烦 不好意思Timer的Interval可以是24小时,希望没有误导大家。 引用 18 楼 feixuyue 的回复:引用 1 楼 sp1234 的回复:比如现在我们决定如何为timer的Interval值,我们计算现在时间跟6:00之间的差距的就好了,就可以设置好timer的Interval了!还用什么一直触发?应该是这样的意思,如果距离6:00很远的话,interval值设置大一点,靠经的话,就1s一次.完全没有必要,计算从现在开始到指定的时间,还需要多少时间,计算出来后,直接休眠到那个时候,醒来就提醒。提醒用MessageBox来提醒,这样,线程会中止直到MessageBox被Click可以参考一下,这个C#开发系统服务时用的定时器组件 系统会做优化,最后还是硬件时钟,这期间不用考虑CPU的使用。 尊重一个SB?那我就掉档次了他不是sp1234,而是sb1234 为何用C#写入数据库中文有乱码出现?? 急:这三条SQL语句要如何实现?(菜鸟问题) 问DataTable.Select()到底返回一个什么样的数组.. 高手进来---发射问题 求助,,C# 存入和读取图片的问题 提问谁有免费图书下载的网址50分 (十万火急!在线等)选定的文件不是有效的visual studio解决方案 为什么我用this.hide() 会引发closeing事件? 过年也不能休息,请教高手一个问题。 如何通过代码获得系统的时间和状态呢? 请问webBrower 如何判断ShowDialog()添加的文件是否是图片
if(datetime.Hour.ToString()=="6")
{
MessageBox.show("6点整");
}
如果在5点启动程序,而闹钟是在6点响,那么Timer的间隔就是1小时
6点响后你应该再修改Interval的值的
不过这个思路也存在缺陷:如果对于系统时间进行调整的话,程序是不会自动识别的。继续跟帖.....
完全没有必要,计算从现在开始到指定的时间,还需要多少时间,计算出来后,直接休眠到那个时候,
醒来就提醒。提醒用MessageBox来提醒,这样,线程会中止直到MessageBox被Click可以参考一下,这个C#开发系统服务时用的定时器组件
引用 1 楼 sp1234 的回复:
比如现在我们决定如何为timer的Interval值,我们计算现在时间跟6:00之间的差距的就好了,就可以设置好timer的Interval了!还用什么一直触发?应该是这样的意思,如果距离6:00很远的话,interval值设置大一点,靠经的话,就1s一次.完全没有必要,计算从现在开始到指定的时间,还需要多少时间,计算出来后,直接休眠到那个时候,
醒来就提醒。提醒用MessageBox来提醒,这样,线程会中止直到MessageBox被Click可以参考一下,这个C#开发系统服务时用的定时器组件