++++++++++谁能做:“定时”执行一个程序模块,用什么方法最优???! +++++++++++++再没有人回答,我就要跳楼了! ( 积分: 50 )

  • 主题发起人 主题发起人 happycyp
  • 开始时间 开始时间
H

happycyp

Unregistered / Unconfirmed
GUEST, unregistred user!
现在在做一个定时程序模块,要求:
(1)一定时间后执行。(如N小时N分钟后)
(2)自己定制日期和时间执行。(年、月、日,星期,小时,分等)
不知道用什么方法最简单,而且系统资源占的最少。
另外,在多线程中:
如何将一个线程中,有一个循环中在执行,如何让它在循环中10秒钟无响应后,跳到下一个循环。
各位有什么高招吗???
求算法。
 
现在在做一个定时程序模块,要求:
(1)一定时间后执行。(如N小时N分钟后)
(2)自己定制日期和时间执行。(年、月、日,星期,小时,分等)
不知道用什么方法最简单,而且系统资源占的最少。
另外,在多线程中:
如何将一个线程中,有一个循环中在执行,如何让它在循环中10秒钟无响应后,跳到下一个循环。
各位有什么高招吗???
求算法。
 
使用timer控件阿,定时执行和指定时间执行都没问题啊,可以判断当前的时间now
循环的问题,你可以计时,10秒无响应则break;
 
(1)比较简单,相信你可以搞定。
(2)可以这样设置时间格式"分|小时|日|星期|月|年 ",不设置的域用*号代替。
比如要每天凌晨4点运行程序,可以这样设置:00|4|*|*|*|*,程序分析这个格式串和系统时间相比就行了。

(3)
sleep(10000);continue;
 
我在找最好的的算法。大家交流一下。
sleep(10000);continue;会使程序什么都不做,而白等10秒钟。
我的意思是程序试图做一件事,如图10S还没有做完,就结束当前操作,执行下一个操作。
 
使用Widnows的任务管理器吧。很简单的。
 
信号灯:waitobject()
 
嘿嘿,不要跳楼拉。。俺来回答 :)

用api:
CreateWaitableTimer()
OpenWaitableTimer()
SetWaitableTimer()
CancelWaitableTimer()

具体使用方法请查看msdn或上网查一下
 
多线程那问题:
用事件通知的方法如:

var
MyEvent: THandle;
MyEvent:=CreateEvent(nil, True, False, nil);

//....

repeat
iRet:=MsgWaitForMultipleObjects(1, MyEvent, False, 10000, QS_ALLINPUT);
case iRet of //_RecListWaitFlag
WAIT_OBJECT_0 + 1:
begin
//wait ... do some
end;
WAIT_OBJECT_0:
begin //返回结果
//.收到通知... 处理完毕,则进入你要的第二此循环
Break;
end;
WAIT_TIMEOUT:
begin //超时
// time out deal...则进入你要的第二此循环
Break;
end;
end; //
until True = False; //repeat


//。。。


//发送事件通知:
SetEvent(MyEvent); //repeat loop中将收到
 
那你的代码需要有一个时间记忆功能,如果超过自动跳出就行了
 
我感觉用api方式最快了,也方便
 
我的一段代码,比较简单方便,可以精确到秒,实际上就是取系统时间做对比。

var
TmpSysTime: _SYSTEMTIME;
begin
GetSystemTime(TmpSysTime); //取得时间
if TmpSysTime.wSecond = 0 then //显示时间
ShowTime;
{
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
}
end;
 
好,帮顶



--------签名档---------------------------

比肩国内顶尖源码下载站点 -> 源码我爱你

http://www.source520.com
http://www.source520.net

80G源码电子书免费免注册下载,大量精辟技术文档库随时更新
******************************************************************
附:为了站点持续发展,现有本站近年来收藏的大量大型商业源码低价出售,
详情请进入以下链接查看:
http://www.source520.com/building_delphi.htm

浏览商业代码请从如下URL进入查看实物:
1.商业源码库1: ftp://source520see3:browse@61.152.199.245/
2.商业源码库2: ftp://source520see2:browse@61.152.199.245/
 
主张用waitforXXXXX系列,非常好用而且比较准,精度也不错
 
兄弟们,能不能给个实例呀。
 
var
TmpSysTime: _SYSTEMTIME;
begin
GetSystemTime(TmpSysTime); //取得时间
if TmpSysTime.wSecond = 0 then //显示时间
ShowTime;
{
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
}
end;
这个方法用过了,好用!!!,非常感谢!!!
 
呵呵,楼主,好用就结帖哦
 
最简单的办法:用Windows的Task Scheduler
 
WaitFor**系统函数会等待系统对象
占用系统资源最少
可且可以设置成"如果在N毫秒内没有完成就超时返回"
可以完这个功能的
 
后退
顶部