[Lazarus] Multi-threading support in IDE
Martin
lazarus at mfriebe.de
Fri Aug 14 11:11:54 CEST 2009
Graeme Geldenhuys wrote:
> Martin wrote:
>> make it
>> if (Application<>nil) and
>> (abs(LastProcessMessages-Now)>((1/86400)/10))
> This does not make much difference on my system. :-(
Hm I tested on windows only. Try adding the 2 lines I inserted with
comments (I have not tested this!!)
Just seeing
if (TheAsyncProcess=nil) and (fProcess.Output<>nil) then begin
// using a blocking TProcess
// Count := 0;
// if fProcess.Output.NumBytesAvailable > 0 then
Count:=fProcess.Output.Read(Buf[1],length(Buf));
if Count=0 then begin
// no output on blocking means, process has ended
break;
end;
end;
One more remark, if it works, it will allow normal editing,etc.
But you can not do:
- search and replace
- find in files
...
Because those themself are long running, and while being inside the
compile's processMessages, the compile will not read the output, and
that may block compiling.
This is because all this stuff is not event-driven, so it cannnot be mixed.
It would work in a single thread and all this, but it must be fully
event-driven.
More information about the Lazarus
mailing list