|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
потоки (TThread) и свойства (property), не все понятно
Добрый день. Есть следующий демокод:
Код:
unit uNewThread; interface uses System.Classes,SysUtils,Dialogs,SyncObjs,StrUtils,ExtCtrls,Windows, WideStrUtils,Vcl.Forms; procedure ThreadDoJob(const aHost:string; var aErrorMsg:string; var aIsJobDone:Boolean); type DoJob = class(TThread) private fHost,fErrorMsg:string; fIsJobDone:Boolean; protected procedure Execute; override; public property ErrorMsg:string read fErrorMsg; property IsJobDone:Boolean read fIsJobDone; constructor Create(const aHost:string; var aErrorMsg:string; var aIsJobDone:Boolean); destructor Destroy; override; end; implementation procedure ThreadDoJob(const aHost:string; var aErrorMsg:string; var aIsJobDone:Boolean); var ThreadJob:DoJob; begin ThreadJob:=DoJob.Create(aHost,aErrorMsg,aIsJobDone); aErrorMsg:=ThreadJob.ErrorMsg; aIsJobDone:=ThreadJob.IsJobDone; end; constructor DoJob.Create(const aHost:string; var aErrorMsg:string; var aIsJobDone:Boolean); begin inherited Create(False); FreeOnTerminate := True; Self.Priority := tpLower; fHost:=aHost; end; destructor DoJob.Destroy; begin inherited Destroy; end; procedure DoJob.Execute; var flg:Boolean; begin flg:=true; (*or FALSE just for fun*) if flg then begin fIsJobDone:=TRUE; fErrorMsg:='7777'; end else begin fIsJobDone:=FALSE; fErrorMsg:='6666'; end; end. прогнозируемо aErrorMsg:=ThreadJob.ErrorMsg; и aIsJobDone:=ThreadJob.IsJobDone; выводят "ничего" в выше стоящий код Вопрос : как вывести результат работы потока в обработчики но без "Synchronize", трубы и прочего из той же оперы а через "property". если такое для потока вообще возможно. что то читал про OnTerminate но ничего канкретно применительно к "property" не нашлось. |
#2
|
|||
|
|||
Есть подозрение, что просто код отрабатывает слишком быстро, просто не успевает. Никаких проблем с тем, что бы считать свойства из объекта потока нет (ну, за исключением безопасного доступа).
А с учетом, что у тебя еще и поток сам помирает... пока ты прочухиваешься, то и читать то уже нечего. У тебя же Execute заканчивается просто мгновенно. |