首页
社区
课程
招聘
[旧帖] [求助]vc6.0 定时器制作 0.00雪花
发表于: 2012-4-20 19:05 1669

[旧帖] [求助]vc6.0 定时器制作 0.00雪花

2012-4-20 19:05
1669
最近想做个定时器的小程序,就只可以指定到某年某月某日某时某分比如:2012-04-20 18:57到了这个时候就开始打印信息
可以添加很多时间,等到了时间就执行相应的操作
要怎么样做才能效率高呢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你这个需求有好几种做法。
1 做一个1000毫秒的定时器,每秒在触发的时候,依次判断各时间是不是到了,是到了,就执行相应的操作。
2 每输入一个时间,都立即与当前时间做个比较,知道该时间与现在时间的秒数,然后Sleep()就行了。这种方法可以用进程来做,不用定时器。
3 结合以上两种,在每秒触发的时候,判断当时保存的秒数,当秒数为0的时候触发,否则就秒数减1。
程序简单,所以效率差别不大。
2012-4-20 20:39
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上的解答,让小弟茅塞顿开,还有一点想问下,如果用第二种方法我添加了很多时间就要开很多线程,那样感觉有点麻烦。
2012-4-21 09:57
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
给楼主个建议........
你不需要同时开很多线程,一个线程就够了的。
timer的回调也只需写一个,

定时器总有先后顺序到时,

到一个kiitimer一个,
然后settimer设置 下一个定时器.
回调函数相同,只是分配的给定时器的ID不同,
那settimer时间参数怎么知道呢?

计算各时间区间才是关键!

而正好微软给我们提供一个专门计算时间差的类
CTimeSpan,精确而且使用方便

这个在MFC中封装有,OLE组件也有COleTimeSpan

非MFC框架也同样适用...............

2012-4-21 13:34
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
5
添加系统计划任务.
2012-4-21 14:40
0
雪    币: 188
活跃值: (336)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
给一个计时器,响应时间按事件取系统事件比较你自己定义的时间事件表,满足条件就做出相应的反应就行。
2012-4-21 16:55
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你说的不错,你说的方法是我说的方法中的第一种。
这种方法简单,但有几个大的缺点。
1 系统在时间到达的时候,调用的是同一个函数,如果响应处理很复杂(比如占用时间很长),就会导致整个程序象卡死一样,无法往下继续。如果处理函数的时间超过了定时间隔,更会导致非常严重的问题。(就是上一个时间到达还没有处理完,下一个时间又到达了)。
2 这种方法,时钟的优先级很低,所以会不准(当然,误差是几十到几百毫秒)。

不过,看楼主所说的,上面的现象应该都不会出现。
2012-4-22 09:32
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
确实如楼上所说,我的程序不会出现楼上大侠所说的情况,但小弟还想问一下,如果出现那样的问题的话,要怎么解决呢,还望大侠赐教。
2012-4-23 01:24
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我不太懂大侠的意思,请问能详细些码。
2012-4-23 01:25
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
打开 "控制面板",里面有"任务计划"
2012-4-23 02:42
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
做一个全局变量,当处理的时候为true,处理完就为false。
在定时器一开始的处理中,如果发现为了true,(表示之前的一个还没处理完),就扔掉不处理(不要延时等,这样会越堵越多)。这样可以避免重入。

BTW:
添加系统计划任务.这个方法适合于进程级的,而不是线程级的。就是说:如果有一个程序可以完成你的任务,那你可以把这个程序放到系统的计划任务中,而楼主所说的,肯定不是这个意思,所以计划任务在这里是肯定不行的。
2012-4-23 09:50
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
确如lirm所说,任务计划不是我的所说的意思
我试了lirm的方式,现在问题解决了,谢谢大家的关注
也非常感谢lirm的热心帮助
2012-4-24 14:12
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
解决就好。
2012-4-25 06:33
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
一个1秒的定时器完全能解决了。要比较的时间添加到STL数据结构中,到了定时终端,取系统时间比较。 要用什么数据结构,可以根据需要选取
2012-4-28 09:42
0
游客
登录 | 注册 方可回帖
返回
//