[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