gpt4 book ai didi

multithreading - 在线程停止时关闭窗口

转载 作者:行者123 更新时间:2023-12-03 18:15:23 27 4
gpt4 key购买 nike

我有一个关于线程和控件的问题。我制作了一个同步模式对话框。有三个进度条和几个字幕。如果应用程序是第一次打开,那么它会打开同步对话框并进行更新。在对话框 Show() 方法上,我创建了三个不同的线程。每个线程控制数据下载、xml解析和数据库插入。然后在进度条上显示进度。所有描述,工作正常。

现在是问题 - 我想在所有项目下载、解析并插入数据库后自动关闭此对话框。我试图检查 progressbar.position 是否等于 progressbar.max 并且我尝试检查线程是否终止。如果我采用进度条方式,对话框关闭得太早并且一个进度条没有完全结束。如果我采用线程检查方式,那么进度条会在进程中间停止,仅此而已。

也许你已经做到了,然后告诉 Delphi n00b,怎么做才是最好的。

提前致谢...

最佳答案

对于这个简单的事情,您可以使用线程 OnTerminate 事件(在主线程的上下文中运行)来减少在线程创建时初始化为 3 的“线程计数”变量。

当线程数达到 0 时,您可以安全地关闭表单。

begin
//..thread creation, stuff
FThreadCount := 3;
DownloadThread.OnTerminate := DecThreadCount;
ParseThread.OnTerminate := DecThreadCount;
InsertThread.OnTerminate := DecThreadCount;
//resume threads and other stuff
end;

procedure TForm1.DecThreadCount(Sender: TObject);
begin
Dec(FThreadCount);
if FThreadCount = 0 then
Close;
end;

关于multithreading - 在线程停止时关闭窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4411408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com