【发布时间】:2012-03-13 15:08:33
【问题描述】:
我正在编写一个必须在后台执行某些操作的应用程序:检查电子邮件并解析它们以将一些数据注入数据库,并连接到 Web 服务以检查某些异步操作的状态。
现在,我的解决方案是一个简单的计时器,它按照预定义的时间表执行这些操作:每五分钟发送一次电子邮件,并且每分钟 Web 服务检查一次(但这些仅在有待处理活动时执行,所以大部分时间这什么都不做。)
目前我没有为此使用线程(我处于开发阶段的早期。)但我的计划是创建一个后台线程并让它离线完成工作。
几个问题:
- 我计划控制计时器中的所有内容。设置一个全局变量(基本的“锁定”)启动线程。如果“锁定”已经设置,请忽略它。线程在终止时将其清理干净。我应该为我的线程使用更强大的锁定/队列机制吗? (我已经安装了 OmniThread)
- 如何运行低优先级的线程?我不希望应用程序在后台线程执行数据插入或联网时感觉迟缓。
- 是否有一种简洁的方法来验证用户活动并仅在用户不忙于键盘/鼠标时启动此线程?
请记住,我对线程没有经验。我曾经写过一个 FTP 同步应用程序,所以我不是一个完整的新手,但那是很久以前的事了。
【问题讨论】:
-
这是一个允许您创建/编辑发票等的应用程序。但它还需要阅读电子邮件并对其进行解析,以将附加的电子发票作为收到的文件注入,并连接到税务局以获取已提交发票的状态。我不想打扰用户进行这些操作,所以我希望它们在后台运行。
-
如果您的后台工作与您的应用程序没有直接交互,我建议使用单独的服务(如果您愿意,可以将其设置为低优先级)来运行它们。因此,即使您的应用程序已关闭,甚至没有用户登录,也可以处理这些作品。
-
@Justmade - 我确实希望在新电子邮件(发票)到达时收到一些通知。
标签: multithreading delphi delphi-xe