Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Синхронизация [D6, WinXP]


Страницы:   1 2

Mr tray ©   (2006-08-27 13:46:00) 

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


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

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


Ketmar   (2006-09-07 16:58:00) [2]

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


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


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

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


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


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

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


Ketmar   (2006-09-07 14:21:00) [5]

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

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


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

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


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

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


DVM   (2006-09-07 13:30:00) [8]


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

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


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

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


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

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


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

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


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


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

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

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


DVM   (2006-08-27 22:38:00) [13]


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

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


Ketmar   (2006-08-27 22:37:00) [14]

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


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


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


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


DVM   (2006-08-27 22:31:00) [16]


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

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


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


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


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


DVM   (2006-08-27 22:26:00) [18]


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

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


Ketmar   (2006-08-27 22:20:00) [19]

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


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


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


Чем?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо