能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你这个需求有好几种做法。
1 做一个1000毫秒的定时器,每秒在触发的时候,依次判断各时间是不是到了,是到了,就执行相应的操作。
2 每输入一个时间,都立即与当前时间做个比较,知道该时间与现在时间的秒数,然后Sleep()就行了。这种方法可以用进程来做,不用定时器。
3 结合以上两种,在每秒触发的时候,判断当时保存的秒数,当秒数为0的时候触发,否则就秒数减1。
程序简单,所以效率差别不大。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢楼上的解答,让小弟茅塞顿开,还有一点想问下,如果用第二种方法我添加了很多时间就要开很多线程,那样感觉有点麻烦。
|
能力值:
( LV9,RANK:140 )
|
-
-
4 楼
给楼主个建议........
你不需要同时开很多线程,一个线程就够了的。
timer的回调也只需写一个,
定时器总有先后顺序到时,
到一个kiitimer一个,
然后settimer设置 下一个定时器.
回调函数相同,只是分配的给定时器的ID不同,
那settimer时间参数怎么知道呢?
计算各时间区间才是关键!
而正好微软给我们提供一个专门计算时间差的类
CTimeSpan,精确而且使用方便
这个在MFC中封装有,OLE组件也有COleTimeSpan
非MFC框架也同样适用...............
|
能力值:
( LV15,RANK:670 )
|
-
-
5 楼
添加系统计划任务.
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
给一个计时器,响应时间按事件取系统事件比较你自己定义的时间事件表,满足条件就做出相应的反应就行。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你说的不错,你说的方法是我说的方法中的第一种。
这种方法简单,但有几个大的缺点。
1 系统在时间到达的时候,调用的是同一个函数,如果响应处理很复杂(比如占用时间很长),就会导致整个程序象卡死一样,无法往下继续。如果处理函数的时间超过了定时间隔,更会导致非常严重的问题。(就是上一个时间到达还没有处理完,下一个时间又到达了)。
2 这种方法,时钟的优先级很低,所以会不准(当然,误差是几十到几百毫秒)。
不过,看楼主所说的,上面的现象应该都不会出现。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
确实如楼上所说,我的程序不会出现楼上大侠所说的情况,但小弟还想问一下,如果出现那样的问题的话,要怎么解决呢,还望大侠赐教。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我不太懂大侠的意思,请问能详细些码。
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
打开 "控制面板",里面有"任务计划"
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
做一个全局变量,当处理的时候为true,处理完就为false。
在定时器一开始的处理中,如果发现为了true,(表示之前的一个还没处理完),就扔掉不处理(不要延时等,这样会越堵越多)。这样可以避免重入。
BTW:
添加系统计划任务.这个方法适合于进程级的,而不是线程级的。就是说:如果有一个程序可以完成你的任务,那你可以把这个程序放到系统的计划任务中,而楼主所说的,肯定不是这个意思,所以计划任务在这里是肯定不行的。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
确如lirm所说,任务计划不是我的所说的意思
我试了lirm的方式,现在问题解决了,谢谢大家的关注
也非常感谢lirm的热心帮助
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
解决就好。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
一个1秒的定时器完全能解决了。要比较的时间添加到STL数据结构中,到了定时终端,取系统时间比较。 要用什么数据结构,可以根据需要选取
|
|
|