think of a lazarus application like this.
repeat
processMessages;
RunSynchronise;
RunQueuedMethods;
RaiseIdleEvent;
until ApplicationEnd
Procedure ProcessMessages;
begin
GetMessage;
HandleMessage; <-- in here you call processMessages again.
end;
So depending on the code you will have re entrance problems, enabled buttons when you shouldn't be able to press them and other out of sync processes which are hard to impossible to predict or debug. In delphi there is the repaint method that only retrieved and processed the painting messages (invalidate, paint, print etc) ignoring everything else, that allowed you to minimize re entrance problems.
As far as I know that does not work in lcl. You should try to use one of the parallel libraries pasMP (search github.com) and I forget the other one sorry, but its in CCR repo that will help you to run methods/procedures in parallel with out writing a tthread descendant.