让一个线程在主窗体关闭后运行,而不是等待线程完成

时间:2014-02-10 13:34:18

标签: multithreading delphi

是否可以创建一个运行SQL语句的简单线程,然后关闭应用程序但让该线程运行直到它完成(主表单仍然正常关闭 - 不等待线程完成)。 / p>

我正在升级将一些测试数据写入日志文件的应用程序,我想将该日志文件批量插入数据库。因为有很多数据和处理它的sql存储过程需要一两分钟才能完成,所以我创建了一个运行存储过程的线程。这个线程在应用程序的生命周期中经常运行但现在我想实现,以便在用户完成测试并关闭应用程序之后,日志中不在服务器上的其余数据是同步。这样,如果所有数据都已同步,我可以避免检查前几天的日志。

如果我使用waitfor函数,整个应用程序将不会关闭,直到存储过程完成,这是不可取的,因为之后应用程序不需要做任何事情。存储过程处理所有错误,因此无需处理应用程序中的错误。

如果我没记错的话,这是在linux中做了很多事情,一个过程会创建另一个过程然后结束,然后子进程被孤立,这就是恶魔的运行方式。但我不知道这是否甚至可以在Windows上使用。

1 个答案:

答案 0 :(得分:1)

进程需要保持活动状态,直到线程完成。线程存在于进程中。带走过程,线程无法忍受。

您可以做的是在UI关闭后等待线程。将等待线程的代码放在UI关闭后运行的方法中。

或者,如果您希望UI流程在任务完成之前终止,则该任务必须位于单独的流程中。您将启动一个新进程来执行该任务。在支持fork()的类Unix系统中,这更容易。在Windows下,您需要找到一种方法将数据导入新进程。