Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

TThread   Найти похожие ветки 

 
axx   (2005-11-07 10:35) [0]

Здравствуйте. Подскажите пожалуйста новечку ...

 ThDailModul = class(TThread)
 private
  FOnState: TNotifyEvent;
 published
  property OnState:TNotifyEvent read FOnState write FOnState;

... не является ли использование события без синхронизации от TThread в основном потоке приложения потенциальным косяком ?


 
Digitman ©   (2005-11-07 10:40) [1]

это зависит от того что происходит в теле конкретного вызываемого метода-обработчика события


 
axx   (2005-11-07 10:46) [2]

В обработчик события просто передается State:SmallInt и запоминается основным потоком.
TDialNotifyEvent = procedure(State:Smallint) of object;


 
Digitman ©   (2005-11-07 10:55) [3]


> запоминается основным потоком


это как ?

обработчик исполняется в том потоке, который его вызывал ..

TMyThread = class(TThread)
..
 FDialNotifyEvent: TDialNotifyEvent;
..
end;

procedure TMyThread.Execute;
begin
..
 FDialNotifyEvent(5);
..
end;

..

var
 AState: Smallint;
procedure TSomeObject.DialNotifyEvent(State:Smallint);
begin
 AState := State; //это "запоминание" выполняется в потоке MyThread.ThreadId, а не в основном потоке !

//и в момент этого самого "запоминания" основной поток вполне может обращаться к переменной AState по записи или чтению, ничего не зная о том что переменная AState в этот же момент модифицируется другим потоком
end;


 
axx   (2005-11-07 11:04) [4]

Спосибо за разъяснения .
Я так понимаю что в моем трудном :-) случае поможет

TCriticalSection.Acquire
...
FDialNotifyEvent(5);
...
TCriticalSection.Release

Только не пинайте если опять глупость сказал :-)))


 
Digitman ©   (2005-11-07 11:08) [5]

поможет, если любой другой поток, потенциально обращающийся к AState, будет обращаться к этой переменной с использованием той же крит.секции


 
Leonid Troyanovsky ©   (2005-11-07 13:18) [6]


> axx   (07.11.05 11:04) [4]

> Я так понимаю что в моем трудном :-) случае поможет
> TCriticalSection.Acquire


Думаю, что InterlockedExchange для присвоения достаточно.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.082 c
2-1131357454
Dimon777
2005-11-07 12:57
2005.11.27
Можно ли создать приложение, в котором нет ни одной формы?


14-1130639182
Crusher
2005-10-30 05:26
2005.11.27
OC


5-1112056838
override
2005-03-29 04:40
2005.11.27
Инициализация полей


1-1130915780
Zhekson
2005-11-02 10:16
2005.11.27
Как обработать непосредственно нажатие на крестик(закрытие формы)


14-1131115835
ArtemESC
2005-11-04 17:50
2005.11.27
Загрузочный сектор