Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1159443497
Valery779
2006-09-28 15:38
2006.10.15
SaveToClipboardFormat


3-1156081674
ronyn
2006-08-20 17:47
2006.10.15
Filter Record


15-1158837623
iamdanil
2006-09-21 15:20
2006.10.15
(с)


1-1157473378
flaxe
2006-09-05 20:22
2006.10.15
Передать String другому приложению


2-1159160368
ROOT
2006-09-25 08:59
2006.10.15
Как вставить изображение в чужую форму.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский