如何检查PROGRAM空闲时间,而不是SYSTEM空闲时间?

如何解决如何检查PROGRAM空闲时间,而不是SYSTEM空闲时间?

| 我已经潜伏了一段时间,这是一个很好的资源。现在,我将尝试成为一名活跃成员... :) 我有一个程序,有时需要递归扫描某些目录(该程序的这一部分正在改进中,但暂时无法使用)。为了避免用户不得不等待此扫描,我希望在用户不使用我的程序的情况下进行扫描。 我打算通过运行一个检查空闲时间的计时器来实现它。我发现了以下检查系统空闲时间的方法: http://www.delphitips.net/2007/11/11/how-to-detect-system-idle-time/ 这将起作用,但是即使用户正在使用同一台计算机上的其他程序,我也希望激活该功能。这样,如果他切换到另一个程序,我可以赶上我需要做的扫描。 我意识到我可以在后台线程中进行扫描,并且可以在某个时候实现某种或某种Windows挂钩,但还不是现在。 编辑: 这里的目标是对程序进行相对容易的更改,以执行在用户未积极使用MY应用程序时可能排队的任何扫描。扫描不是特别密集,但是它不是在线程中完成的,因此在进行过程中会冻结我的应用程序。基本上,我在寻求长期解决方案时正在寻求快速的胜利。     

解决方法

使用
Application.OnIdle
事件。当您的程序没有更多要处理的窗口消息时,将触发该事件。键盘和鼠标都生成消息,因此,如果没有更多消息,则即使有焦点,用户也不会使用您的程序。
procedure TJasonForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
var
  NoMoreFiles: Boolean;
begin
  // TODO: Scan for the next file
  Done := NoMoreFiles;
end;
只要
Done
为False并且队列中没有消息,您的程序将继续调用该事件处理程序,从而使您可以找到更多文件。当用户生成一些输入时,您的程序将在再次调用
OnIdle
之前处理这些消息。 扫描完文件系统后,将
Done
设置为True,以便程序停止重新调用
OnIdle
处理程序。如果您忽略这样做,那么您的程序将重复使用所有可用的CPU时间来调用不执行任何操作的事件处理程序。 为此,您需要使用非递归搜索例程。递归搜索将在返回之前搜索整个文件系统,但是如果这样做,则
OnIdle
处理程序将挂起您的程序,这与您想要的相反。您可以使用目录名称的队列,并且每次触发该事件时,从队列中弹出一个项目,进行搜索,然后将其内容添加到队列的末尾。     ,  ...但是我希望激活   即使用户正在工作也能正常工作   与相同的其他程序   电脑。这样,如果他切换到   另一个程序,我可以赶上   我需要做的扫描。 在Application.OnActivate中停止扫描,然后在Application.OnDeactivate中恢复。     ,您需要一个单独的线程,该线程将在系统空闲时恢复,或在有活动时暂停。一种简单的方法是放置一个计时器组件,并检查系统是否闲置并且线程已挂起或不使用ResumeThread,SuspendThread 看这里 http://pastebin.com/8X9Sg42H我为您的情况精心制作了一些东西     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?