![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Tthread и с чем его едят?
malefik © (2006-11-08 10:28:00)Добрый времени суток!
несложный вопрос....
допустим обьявлен класс унаследованный от tthread. в секции public обьявлено поле типа int.
в приложении при создании формы создается обьект....этого класса....
TMyThread * thread = new TMyThread(false);
могу я после этого обратится к полю...
например
thread->имя_поля
или всю работы всегда проводить через
Synchronize???
DVM (2006-11-08 10:38:00) [41]Лучше так как то:
TMyThread = class(TThread)
private
FCriticalSection: TCriticalSection;
FMyParam: integer;
procedure SetMyParam(const AMyParam: integer);
function GetMyParam: integer;
public
constructor Create(CreateSuspended: boolean);
destructor Destroy; override;
property MyParam: integer read GetMyParam write SetMyParam;
end;
constructor TMyThread.Create(CreateSuspended: boolean);
begin
inherited Create(CreateSuspended);
FCriticalSection := TCriticalSection.Create;
end;
destructor TMyThread.Destroy;
begin
FCriticalSection.Free;
inherited Destroy;
end;
procedure TMyThread.SetMyParam(const AMyParam: integer);
begin
FCriticalSection.Enter;
try
FMyParam := AMyParam;
finally
FCriticalSection.Leave;
end;
end;
function TMyThread.GetMyParam: integer;
begin
FCriticalSection.Enter;
try
Result := FMyParam;
finally
FCriticalSection.Leave;
end;
end;
malefik (2006-11-08 10:37:00) [42]А что отностится к потоко незащищеным операциям??
DVM (2006-11-08 10:32:00) [43]
> могу я после этого обратится к полю...
>
> например
> thread->имя_поля
Не стоит так делать.
> Можешь, ничего страшного не произойдет
не факт
DrPass (2006-11-08 10:30:00) [44]
> могу я после этого обратится к полю...
>
> например
> thread->имя_поля
Можешь, ничего страшного не произойдет. Syncronize - только для потоконезащищенных операций