Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
3-1129582275
Павел
2005-10-18 00:51
2005.11.27
синхронизация БД


4-1127676626
Ishmael
2005-09-25 23:30
2005.11.27
Выделение физической памяти


6-1124057240
NikNet
2005-08-15 02:07
2005.11.27
У кого есть UUE кодер и ДЕКОДЕР?


4-1127504463
polaroid
2005-09-23 23:41
2005.11.27
Прозрачная форма (глюки с прозрачностью чёрного цвета)


1-1131007433
ВоваВова
2005-11-03 11:43
2005.11.27
меню для tray иконки




   Наверх