TCriticalSection Threrad Example Delphi
Ivan Revelli - 15/May/2020
Ivan Revelli - 15/May/2020
[SHOWTOGROUPS=4,20]
Example on how to user a critical section in Delphi:
Delphi/Pascal
From post found at: Как увидеть ссылки? | How to see hidden links?
In short:
How to handle Log in a Threaded manner in Delphi
Active 6 years, 10 months ago - Viewed 3k times
Delphi XE2
I have a form with a TMemo that I want to show what is going on in several services started by the application.
What I have running:
....
[/SHOWTOGROUPS]
Example on how to user a critical section in Delphi:
Delphi/Pascal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | TThreadedMsgEvent = class( TThread ) private FLock : TCriticalSection; FStr : TQueue<String>; FMemo : TMemo; function GetEvent : String; protected procedure Execute; override; public procedure AddEvent( aMsg : String ); constructor Create( AMemo: TMemo ); destructor Destroy; override; end; implementation { TThreadedMsgEvent } procedure TThreadedMsgEvent.AddEvent(aMsg: String); begin FLock.Acquire; FStr.Enqueue( FormatDateTime('DD/MM/YY HH:NN:SS.ZZZ',Now)+ ' : '+ aMsg ); FLock.Release; end; constructor TThreadedMsgEvent.Create(aMemo: TMemo); begin inherited Create(True); FreeOnTerminate := False; FOnMessage := ACallBack; FStr := TQueue<String>.Create(); FLock := TCriticalSection.Create; FMemo := aMemo; Resume; end; destructor TThreadedMsgEvent.Destroy; override; begin FreeAndNil( FStr ); FreeAndNil( FLock ); end; procedure TThreadedMsgEvent.Execute; begin while not Terminated do begin try if (FStr.Count > 0) then begin if Assigned( aMemo ) then begin TThread.synchronize( procedure begin FMemo.Lines.Add( GetEvent ); end; ); end; end; except end; TThread.Sleep(1); end; end; function TThreadedMsgEvent.GetEvent: String; begin FLock.Acquire; result := FStr.Dequeue; FLock.Release; end; |
From post found at: Как увидеть ссылки? | How to see hidden links?
In short:
How to handle Log in a Threaded manner in Delphi
Active 6 years, 10 months ago - Viewed 3k times
Delphi XE2
I have a form with a TMemo that I want to show what is going on in several services started by the application.
What I have running:
- idHTTPServer running with idContext responding to requests
- a Thread downloading updates from Dropbox
- idUDPServer responding to UDP requests
- another thread taking care of some database stuff.
- the main application thread also needed to add log
....
[/SHOWTOGROUPS]