[Lazarus] TThread.Synchronize
LacaK
lacak at zoznam.sk
Wed Oct 26 07:57:18 CEST 2016
>
>>
>>> Check for Application.ProcessMessages and CheckSynchronize calls.
>>> These process synchronize queue, if I am not mistaken.
>>
>> I do not call CheckSynchronize nor ProcessMessages in my application.
>> So only any LCL component or widget set can call it in background ?
>
> ShowModal() for a modal form will call it.
Ah really?
It happens in my application!
Basicaly I have one form MyForm with one background thread, which every
10 sec. checks for files in shared folder and adds them to listbox
visible to user:
procedure TRefreshFileListThread.Execute;
begin
while not Terminated do begin
Synchronize(@MyForm.UpdateFileList); // UpdateFileList is method
which clears listbox and then adds files in given shared folder
Sleep(10000);
end;
When new file is shown then user can click on button, which imports data
from this file:
Before import is shown another form with question about "Do you want
really import file XYZ ?"
Do you say, that when this "question form" is shown it can release call
to MyForm.UpdateFileList ?
Now I did quick test and it seems, that it is so!
But is it correct behavior ? IMO it is against thread safety, which
should Synchronize guarantee!
While "main thread" is executing others threads should wait in queue ...
if not fixable, then can it be documented?, because this is exception
which is not intuitive
-Laco.
More information about the Lazarus
mailing list