如何让我的。。。(50分)

  • 主题发起人 主题发起人 请教高手
  • 开始时间 开始时间

请教高手

Unregistered / Unconfirmed
GUEST, unregistred user!
我编了一个NT上的SERVICE,其中用到了一个线程,由SERVICE控制线程
现在我想实现这么一个功能,就是每隔一分钟线程去检查某一文件夹,
如果有文件就进行分析
暂停线程我用了SLEEP(60000)----好象有时候就一睡不醒了
后来我又用了
StartTime := now;
repeat
application.ProcessMessages
until second(now,starttime)>60
但是CPU的占用率达到了100%
有没有好的方法 让我的线程睡一分钟,这个问题应该很普遍和实用吧
请大家来讨论一下
 
用定时器.
 
为什么用定时器呢?轮询多慢哦?用消息,,也就是要监视指定的目录嘛,,呵呵
你运气真好,,我上个星期才做了一个和你的要求一模一样的东西,,呵呵,,,,
晚上我到宿舍再给你部分关键代码:)
 
[red]太好了,EMAIL我吧,哈哈哈哈,太高兴了,高兴得不得了[/red]
 
呵呵,,暂停线程你用SLEEP()函数?搞错没有?你要用PAUSE()函数塞,,,
其实SLEEP()函数只是让操作系统在指定的时间内不分配时间片给线程,,,,如果你指定的
这个时间不准确,,(假设你的线程要响应一个消息,而该消息又不确定什么时候发出来),
那岂不是可能造成预料不到的后果?
 
EMAIL呢?
 
CHINALUOTIAN@21CN.COM,感谢
 
增加一下TApplicationEvents
在它的
procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
vardo
ne: Boolean);
begin
//加入OldTime-NewTime来完成时间调度,这样对系统的影响是最小的
end;
 
不要用sleep做延时,当它延时时其它程序也不能正常工作可用以下的:
var
i:longint;
begin
for i:=0 to i<20000do
application.ProcessMessages;
end;
i的值可根据你的时间调整
 
框架例子已经发到你的信箱了,还有疑问在论坛上提出来
 
为什么不执行啊?
我在TService1.ServiceExecute中加入
while not terminateddo
service1.ShellChangeNotifier1.OnChange;
我将线程中的代码移植到TService1.ShellChangeNotifier1Change中
while not service1.Terminated do
代码
 
但是当我的目录发生变化,如写入文件,删除文件,复制粘贴都不起作用啊
 
Nizvoo@etang.com
我要一份读读,学习
 
to 请教高手:
>>为什么不执行啊?
你需要INSTALL 进去啊!而且INSTALL进去后,你可以在服务列表中看得到的,,如果你仅仅
INSTALL了,而没有启动它,它当然是没起作用了,因此你要么手工启动,要么用 API 来启动!
另外:
在你的服务的 OnExecute()中加的那个语句是为了维持服务线程不终止塞,它是在一直等待着
处理消息的嘛!!!你要监视的目录要设定塞,,那个东西不是有监视选项让你选得嘛,,
包含有文件名称、目录名称、属性、大小、写、安全变化的选项得嘛,,你需要根据你的情况来
灵活选择了塞,例如,大小发生变化,要么写进了文件,要么就是删除了文件啊,,,我举个
例,,,其它的你自己思考,,,
我不可能把我的完整代码给你,,因为这是一个项目中的一部分,在监视目录变化后处理的
东西我可不 敢说出来,,否则我有责任要负了!!!!!!
如果你还不清楚,,再说了,,哎呀,,我该在那框架里的监视头加 BEEP() 函数的,这样你
在安装了这个例子服务并启动后,网监视目录里写个文件或拷贝呀什么的,计算机的喇叭就
会叫一下了!!!
 
多人接受答案了。
 
后退
顶部