KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
The app is written in Delphi XE. I have two classes, a TBoss and TWorker, which are both based of of TThread. The TBoss is a single instance thread, which starts up and then will create about 20 TWorker threads. When the boss creates a instance of TWorker it assigns it a method to call synchronize on, when the Worker has finished with what it's doing it calls this method which allows the Boss to access a record on the Worker. However I feel this is a problem, calling synchronize appears to be locking up the whole application - blocking the main (ui) thread. Really it should just be synchronizing that worker to the boss thread.... Previously I used messages/packed records to send content between threads which worked well. However doing it this way is much cleaner and nicer.... just very blocking. Is there a way to call Syncronize in the worker to only wait for the Boss thread? My code: type TWorker = class(TThread) private fResult : TResultRecord; procedure SetOnSendResult(const Value: TNotifyEvent); .... .... public property OnSendResult: TNotifyEvent write SetOnSendResult; property Result : TResultRecord read fResult; .... end; ... ... procedure TWorker.SendBossResults; begin if (Terminated = False) then begin Synchronize(SendResult); end; end; procedure TWorker.SendResult; begin if (Terminated = false) and Assigned(FOnSendResult) then begin FOnSendResult(Self); end; end; Then in my Boss thread I will do something like this var Worker : TWorker; begin Worker := TWorker.Create; Worker.OnTerminate := OnWorkerThreadTerminate; Worker.OnSendResult := ProcessWorkerResults; So my boss then has a method ca
Tags (comma-separated)
Save Edits
Cancel