【发布时间】:2010-09-02 10:08:08
【问题描述】:
我试图在我的应用程序的长时间操作期间显示一个指示覆盖(一个旋转的圆点)的活动。为此,我创建了一个带有 TImage 和 Imagelist 的无边框透明表单,我试图在主线程繁忙时在线程中更新它。
我遇到的问题是冗长的操作似乎没有被我的线程“中断”。 thread.Execute 函数在冗长的操作开始之前循环了几次,然后在操作完成后再次循环。
似乎由于某种原因线程被饿死了。我试图提高它的优先级,但看不到任何效果。
有没有人有类似的经验可以分享,或者甚至有解决方案?
线程函数源码
procedure TIndicatorThread.Execute;
begin
inherited;
while(not Terminated) do
begin
fDlg.fCurindex := (fDlg.fCurindex+1) mod 12;
Synchronize(UpdateImage);
Application.ProcessMessages;
sleep(80);
end;
Synchronize(fDlg.close);
Synchronize(fDlg.Free);
end;
主线程
begin
[...]
myThread := TIndicatorThread.Create;
mythread.Resume;
Init_SomeUIRelatedstuff;
Application.ProcessMessages;
DoLengthyOperation;
mythread.Terminate;
【问题讨论】:
标签: multithreading delphi delphi-2010