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

Вниз

Синхронизация   Найти похожие ветки 

 
Mr tray   (2006-08-27 13:46) [0]

Здравствуйте! У меня есть обычная оконная программа с одним окном. У формы этой есть переменная mt:tmythread (tmythread = class (TThread)). У mt есть свойство, которое нужно изменить (желательно немедленно), дав команду об этом из одного из методов моей главной формы. Как это осуществить? Спасибо.


 
Мефисто   (2006-08-27 13:50) [1]


> У mt есть свойство, которое нужно изменить (желательно немедленно),
>  дав команду об этом из одного из методов моей главной формы.
>


Раз свойство уже есть так и изменяй. В чем проблема то?
Т.к. телепаты в отпуске обясни задачу шире или код приведи.


 
Anatoly Podgoretsky ©   (2006-08-27 13:58) [2]

У TThread есть метод Synchonize


 
Мефисто   (2006-08-27 14:03) [3]


> Anatoly Podgoretsky ©   (27.08.06 13:58) [2]


Если вчитываться в вопрос, то:
Property или Synchonize? Вот в чем вопрос :)


 
Anatoly Podgoretsky ©   (2006-08-27 14:07) [4]

А если вчитаться, то у него вообще одновременно и окна и формы и черт знает еще что


 
Пусик ©   (2006-08-27 21:54) [5]

TMyThread=class(TThread)
private
 FCriticalSection: TCriticalSection;
 FField: TString;
 procedure SetField(const Value: String);
 function GetField: String;
protected
 procedure Execute; override;
public
 property Field: String read GetFField write SetFField;
end;

procedure TMyThread.SetFField(const Value: String);
begin
 FCriticalSection.Enter;
 try
   FField := Value;
 finally
   FCriticalSection.Leave;
 end;
end;

function TMyThread.GetFField:String;
begin
 FCriticalSection.Enter;
 try
   Result := FField;
 finally
   FCriticalSection.Leave;
 end;
end;


 
Ketmar ©   (2006-08-27 22:01) [6]

лучше TMultiReadExclusiveWriteSynchronizer.


 
Пусик ©   (2006-08-27 22:13) [7]


> Ketmar ©   (27.08.06 22:01) [6]
> лучше TMultiReadExclusiveWriteSynchronizer.


Чем?


 
Ketmar ©   (2006-08-27 22:20) [8]

> [7] Пусик ©   (27.08.06 22:13)
уточню: для случая, когда много читают и мало пишут. о чём в справке сказано. %-)


 
DVM ©   (2006-08-27 22:26) [9]


> У mt есть свойство, которое нужно изменить (желательно немедленно),
>  дав команду об этом из одного из методов моей главной формы.
>  Как это осуществить?

Смотря что за свойство. Во многих случаях просто бери и меняй. Ничего страшного произойти не должно. Особенно если поток сам это свойство только читает.


 
Пусик ©   (2006-08-27 22:29) [10]


> Во многих случаях просто бери и меняй. Ничего страшного
> произойти не должно. Особенно если поток сам это свойство
> только читает.


Ни в коем случае. На чтение код обязательно надо синхронизировать так же, как и на запись.


 
DVM ©   (2006-08-27 22:31) [11]


> Ни в коем случае. На чтение код обязательно надо синхронизировать
> так же, как и на запись.

Не факт. Т.е. не всегда.


 
Пусик ©   (2006-08-27 22:36) [12]


> DVM ©   (27.08.06 22:31) [11]
>
> > Ни в коем случае. На чтение код обязательно надо синхронизировать
>
> > так же, как и на запись.
>
> Не факт. Т.е. не всегда


Только для переменных типа Boolean не нужна синхронизация..


 
Ketmar ©   (2006-08-27 22:37) [13]

> [11] DVM ©   (27.08.06 22:31)
вообще-то всегда. если лень "тяжеловесами", есть ещё InterlockedXXX().


 
DVM ©   (2006-08-27 22:38) [14]


> Только для переменных типа Boolean не нужна синхронизация

Я это и имел ввиду.


 
Mr tray   (2006-08-28 00:08) [15]


> А если вчитаться, то у него вообще одновременно и окна и
> формы и черт знает еще что

Простите за некорректность. У меня окна и формы (в данном случае) одно и то же.

Я тут встретил много споров отвечающих друг между другом... Я много информации и читаю из другого потока (mt). Не думал, что и для чтения необходима синхронизация. Читаю и значения переменных, и свойств (то есть вызываемых функций). Существует ли какой-то универсальный (-ые) способ (-ы) для синхронизации записи и чтения переменных и свойств? Или Пусик ©   (27.08.06 21:54) [5] и есть тот способ?


 
Ketmar ©   (2006-08-28 00:21) [16]

> [15] Mr tray   (28.08.06 00:08)
куда уж универсальней? в [5] и [6], по-моему, всё сказано...


 
Mr tray   (2006-08-28 01:22) [17]

Ketmar ©   (28.08.06 00:21) [16]
Спасибо за направление, буду разбираться...


 
Mr tray   (2006-09-07 13:07) [18]

Этаа. Ещё вопрос... Если запись денных в другой поток происходит, когда тот поток (в который идет запись) находится в ожидании (путем waitforsingleobject), тогда тоже необходима синхронизация для записи?


 
DVM ©   (2006-09-07 13:30) [19]


> тогда тоже необходима синхронизация для записи?

Лучше сделать, а вдруг пока запись еще не завершилась поток выйдет из waitforsingleobject?


 
Mr tray   (2006-09-07 13:34) [20]

использую TMultiReadExclusiveWriteSynchronizer. Как я понял, запись и чтение в/из другого потока нужно заключать в рамки begin/end write/read.
вопросы:
1. чтение свойства является ли чтением (то есть, случаем, где необходимо использовать beginread и endread), когда
 а) в секции read свойства стоит какая-то функция
 б) в секции read свойства стоит какая-то переменная
2. то же самое, только с записью в свойство.


 
Mr tray   (2006-09-07 13:38) [21]

DVM ©   (07.09.06 13:30) [19]
у меня такой случай, что состояние ивента (а именно состояние ивента заставляет тот поток (поток 1) ожидать) изменяется из потока 2 на состоянние, позволяющее потоку 1 продолжить работу. как я понимаю, сначала происходит запись, а потом waitforsingleobject пускает механизм дальше.


 
Ketmar ©   (2006-09-07 14:21) [22]

> [20] Mr tray   (07.09.06 13:34)
а подумать? что, функции никаких переменных не читают? или не пишут? или переменные-property чем-то отличаются от просто переменных-полей?

> [21] Mr tray   (07.09.06 13:38)
сначала происходит то, что написано в коде. написана запись -- будет запись. написаны танцы с бубном -- будут танцы с бубном.


 
Mr tray   (2006-09-07 15:46) [23]


> сначала происходит то, что написано в коде. написана запись
> -- будет запись. написаны танцы с бубном -- будут танцы
> с бубном.

а потом, наверное, суп с котом?..


 
Mr tray   (2006-09-07 16:49) [24]


> а подумать? что, функции никаких переменных не читают? или
> не пишут?

значит можно пустить запись и чтение вместе?


 
Ketmar ©   (2006-09-07 16:58) [25]

> [24] Mr tray   (07.09.06 16:49)
???


 
Mr tray   (2006-09-07 18:02) [26]

Mr tray   (07.09.06 16:49) [24] почитал хелп. нельзя.
------
А что, если осуществить такой вот способ записи и чтения: сделать MMF с необходимыми данными, и читать и писать туда сколько нужно. Этот способ пройдет? Так как, я думаю, не я первый придумал такой метод, кто что может сказать о его хороших и плохих сторонах?



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

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

Наверх




Память: 0.53 MB
Время: 0.049 c
3-1155390045
Михаил1234567890
2006-08-12 17:40
2006.10.15
База данных аэропорта


15-1158838499
StriderMan
2006-09-21 15:34
2006.10.15
Софт для управления проектами


15-1158816466
Ega23
2006-09-21 09:27
2006.10.15
С Днём рождения! 21 сентября


2-1159176559
mfender
2006-09-25 13:29
2006.10.15
AccesViolation в XML


3-1155812178
Antoxa2005
2006-08-17 14:56
2006.10.15
Подскажите, а как монопольно открыть бд FB и что будет...