Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c