![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация [D6, WinXP]
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.
Чем?