[Lazarus] animated splash screen for lengthy operation, works with windows, doesn't with linux
Luca Olivetti
luca at wetron.es
Mon Mar 27 11:59:29 CEST 2023
El 27/3/23 a les 11:06, Sven Barth via lazarus ha escrit:
> Luca Olivetti via lazarus <lazarus at lists.lazarus-ide.org
> <mailto:lazarus at lists.lazarus-ide.org>> schrieb am Mo., 27. März 2023,
> 10:34:
>
> El 27/3/23 a les 10:13, Jean SUZINEAU via lazarus ha escrit:
> >
> > Le 27/03/2023 à 09:46, Luca Olivetti via lazarus a écrit :
> >> procedure TUpdateThread.Execute;
> >> begin
> >> while not Terminated do
> >> begin
> >> FWaitForm.ShowProgress;
> >> Sleep(30);
> >> end;
> >> end;
> >
> > Usually I use TThread.Synchronize to ensure that the graphic code
> is run
> > by the main thread.
> >
> > But it won't work if your main thread is blocking.
>
> Exactly
>
> >
> > May be you should do the inverse move the lengthy operation to a
> > separate thread and keep the main thread for the splash screen ?
>
> Yes, I usually do that, but in this case it's not possible (the lengthy
> operation is just a TSQLQuery.open that I cannot delegate to a
> different thread).
>
>
> You need to find a way then, because the GUI handling *must* be done in
> the main thread.
Opening the query in a thread[*] seems to have no ill effects, so that's
what I'm doing now.
[*] instead of opening the query I spawn a thread that opens it, wait
for it to finish while executing Application.ProcessMessages and
eventually reraise the exception that was generated inside the thread.
Bye
--
Luca Olivetti
Wetron Automation Technology http://www.wetron.es/
Tel. +34 93 5883004 (Ext.3010) Fax +34 93 5883007
More information about the lazarus
mailing list