gpt4 book ai didi

multithreading - 打开没有新线程的大型查询

转载 作者:行者123 更新时间:2023-12-03 19:43:05 24 4
gpt4 key购买 nike

我有一个需要加载到内存中的大型查询。此查询大约需要 30 秒才能打开。它在应用程序启动后立即加载,仅加载一次。在此期间,应用程序挂起。我需要做的是在 30 秒内更新进度条。我试图创建一个新线程来更新进度条,但它只会在打开查询后更新。谁能指出一个简单的方法来做到这一点?

我创建了一个线程类:

type
TMyThread = class(TThread)
private
fLowerLimit: Integer;
fUpperLimit: Integer;

我正在创建线程类的一个实例:
   CountingThread := TMyThread.Create(0, 300, True);
CountingThread.Resume;
//
SplashDlg.Show;

在线程内我只是更新进度条:
procedure TMyThread.UpdateMainThread;
begin
SplashDlg.ProgressBar1.Position:= SplashDlg.ProgressBar1.Position+1;
MyDebug('UpdateMainThread:'+ IntToStr(SplashDlg.ProgressBar1.Position));
end;

查询打开时线程挂起。

最佳答案

如果您希望获得更准确的答案,最好在此处粘贴一些代码。

有两种方法可以处理数据并使 UI 响应。

  • 您可以在循环中使用 Application.ProcessMessages。
  • 或者您已经接近的线程解决方案。

  • 问题是我不认为你有一个循环,你正在使用一个组件,如果该组件没有调用方法来显示进度,你就无法估计查询需要多长时间才能完成。因此,您要么在没有进度条的情况下执行查询时显示加载...屏幕,要么告诉我们更多关于您用于查询的内容。

    希望能帮助到你

    关于multithreading - 打开没有新线程的大型查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13914259/

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