Форум: "Основная";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизСинхронизация Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c