Главная страница
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.026 c
14-1130944856
-[ HAWK ]-
2005-11-02 18:20
2005.11.27
Использование скинов


2-1131348915
axx
2005-11-07 10:35
2005.11.27
TThread


3-1129046959
NiGGa
2005-10-11 20:09
2005.11.27
Нужна консультация косательно сервера БД


2-1131611315
Рафик
2005-11-10 11:28
2005.11.27
Вопрос по Rave Report


2-1131686638
Bradobrei
2005-11-11 08:23
2005.11.27
рисунок с текстом