![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обращение к переменным в потоках
cyborg © (2005-12-08 10:02:00)Создаю поток CreateThread, как в нём правильно работать с переменными, которые могут обрабатываться вне потока?
Reindeer Moss Eater (2005-12-08 12:19:00) [21]какие варианты синхронизации доступа к общим данным применимы/предпочтительны
и
как в нём правильно работать с переменными, которые могут обрабатываться вне потока?
имеют одинаковый смысл, только слова разные?
Смысл не одинаковый, потому что у воторого вообще смысла нет.
Мне например нужно что бы запись в переменные не синхронизировалась и в переменных появлялся "мусор".
Надо и все тут.
Мне работать с критическими секциями - неправильно.
Digitman (2005-12-08 12:11:00) [22]
> cyborg © (08.12.05 12:00) [20]
> должны существовать общие решения
Нет не должны.
А даже если и должны, то опять же конкретности требуюся - например, используется ли VCL, подразумеваются ли под переменными в т.ч. и переменные объектных типов, хранящие ссылки на виз.компоненты в составе VCL
> не кажется ли вам
нет, не кажется.
зато кажется другое - когда трудно изложить конкретную конечную задачу словами, следует приводить хотя бы наброски кода с пояснениями, где и какие сомнения в нем
cyborg (2005-12-08 12:02:00) [23]
> [19] Leonid Troyanovsky © (08.12.05 11:56)
Спасибо, я через критикал сектион уже сделал.
Вопрос закрыт, ветку можно смело переносить в потрепаться :).
cyborg (2005-12-08 12:00:00) [24]
> [17] Digitman © (08.12.05 11:40)
> Два (или более) работающих потока одного и того же процесса
> потенциально способны одновременно обратиться к общим данным
> как по записи, так и по чтению... Чем это чревато и какие
> варианты синхронизации доступа к общим данным применимы/предпочтительны
> в тех или иных сабжевых ситуациях ? Существуют ли общие
> решения ?
Так я не писал по причине, что я знаю чем это чревато и что должны существовать общие решения. Только не знаю какие, вот об этом и хотел узнать.
не кажется ли вам, что
какие варианты синхронизации доступа к общим данным применимы/предпочтительны
и
как в нём правильно работать с переменными, которые могут обрабатываться вне потока?
имеют одинаковый смысл, только слова разные?
Leonid Troyanovsky (2005-12-08 11:56:00) [25]
> cyborg © (08.12.05 10:53) [9]
> В потоке нужно добавлять строку к уже имеющейся строке.
Напоминаю: BeginThread.
А лучше - TThread.
--
Regards, LVT.
Leonid Troyanovsky (2005-12-08 11:53:00) [26]
> Digitman © (08.12.05 11:40) [17]
> От тебя это и требуется - конкретности ! Ибо общих рекомендаций
> и решений нет и быть не может - все зависит от конкретно
Думаю, что по исходному вопросу достаточно конкретный ответ,
все же, возможен и звучит он примерно так:
Читать: Джефри Рихтер. "Windows для профессионалов", 4-е издание.
--
Regards, LVT.
Digitman (2005-12-08 11:40:00) [27]
> cyborg © (08.12.05 11:20) [14]
> я с прашивал В ОБЩЕМ по работе, а не конкретно со строкой
> или байтом
На "общий вопрос" ты и получил "общий ответ" [1].
Не так уж и сложно было сообразить, что без конкретностейвопрос не имеет ни смысла ни ответа. И конкретности эти на данном этапе обсуждения ситуации вовсе не относятся к реальному типу тех переменных, которыми ты озаботился.
> Предложение "как в нём правильно работать с переменными"
> как бы подразумевает вопрос
Заметь - это тыподразумеваешь !) .. И почему ты считаешь, что подразумеваемое тобой столь же очевидно и любому другому человеку - вовсе непонятно.
> Может мне объяснить
От тебя это и требуется - конкретности ! Ибо общих рекомендаций и решений нет и быть не может - все зависит от конкретно поставленной тобой задачи.
И объяснишь, не поломаешься) ... За помощью в дан.случае, заметь, обратился именно ты - тебе и решать, как быстро ты получишь подробный ответ на столь же подробное изложение вопроса.
А все что от тебя требовалось - задать вопрос хотя бы в такой форме:
Два (или более) работающих потока одного и того же процесса потенциально способны одновременно обратиться к общим данным как по записи, так и по чтению... Чем это чревато и какие варианты синхронизации доступа к общим данным применимы/предпочтительны в тех или иных сабжевых ситуациях ? Существуют ли общие решения ?
Reindeer Moss Eater (2005-12-08 11:25:00) [28]Потому, что я с прашивал В ОБЩЕМ по работе, а не конкретно со строкой или байтом.
Я так же не стал опускаться до частностей и дал общий ответ.
С переменными в потоках надо обходиться аккуратно.
И это вовсе не всегда предполагает обязательное исполльзование механизмов синхронизации.
Leonid Troyanovsky (2005-12-08 11:20:00) [29]
> cyborg © (08.12.05 10:02)
> Создаю поток CreateThread, как в нём правильно работать
> с переменными, которые могут обрабатываться вне потока?
Начать надо c BeginThread. Или TThread.
Ну, и
http://www.compress.ru/Common/Article/?1EFC4BF55D24E4C88304DF4771C16B4
--
Regards, LVT.
cyborg (2005-12-08 11:20:00) [30]>[10] TUser © (08.12.05 10:56)
Да.
> [12] Digitman © (08.12.05 11:01)
> Почему бы сразу не изложить вопрос хотя бы в форме [9] и
> упомянуть там "синхронизацию" ?
Потому, что я с прашивал В ОБЩЕМ по работе, а не конкретно со строкой или байтом.
Теперь можно отвлечься от темы и обсудить мой вопрос :)
Предложение "как в нём правильно работать с переменными" как бы подразумевает вопрос, как работать с различными данными в потоке, слово "правильно" подразумевает как положено, как это делают все, как нужно в конце концов. Не понимаю чего ещё тут можно увидеть кроме этого? Может кто тут про тапочки смысл углядел или про изготовление парового двигателя?
Может мне объяснить, какой другой смысл моего вопроса скрыт в этом тексте "Создаю поток CreateThread, как в нём правильно работать с переменными, которые могут обрабатываться вне потока?"?
> [11] Reindeer Moss Eater © (08.12.05 10:57)
Вот это другое дело. За это спасибо. Неужели в первом посте нельзя было написать?
Кстати http://www.delphimaster.ru/cgi-bin/forum.pl?id=1134026232&n=3&web=1
Defunct (2005-12-08 11:17:00) [31]> cyborg
один из возможных способов
TSomeClass = class(..)
..
private
fSecuredString : String;
procedure GetString:String;
procedure SetString(const value: String);
public
property SecuredString read GetString write SetString;
..
end
procedure TSomeClass.SetString;
begin
CS.Aquire;
try
fSecuredString := value
finally
CS.Release
end
end;
function TSomeClass.GetString;
begin
CS.Aquire;
try
Result := fSecuredString
finally
CS.Release
end
end;
где CS - TCriticalSection (unit SyncObjs) создается в конструкторе и уничтожается в деструкторе.
Digitman (2005-12-08 11:01:00) [32]
> cyborg © (08.12.05 10:53) [9]
А как иначе прикажешь реагировать на твой изначальный вопрос ?!
Из штанов надо выпрыгивать, пытаясь протелепатировать, что же ты там такое имел ввиду под "правильностью" и "обращением" ?
Почему бы сразуне изложить вопрос хотя бы в форме [9] и упомянуть там "синхронизацию" ? Что, два слова сразу было трудно связать ?
> Как и чем не знаю
читай справку и MSDN про критические секции, их использование в дан.случае оправдано в качестве защиты данных от мультипоточных обращений
Reindeer Moss Eater (2005-12-08 10:57:00) [33]Остроум пришел потому что до него здесь нарисовался тугодум.
Используй TCriticalSection
TUser (2005-12-08 10:56:00) [34]
> В потоке нужно добавлять строку к уже имеющейся строке.
А другой поток (например, основной) может в это время к этой строке обращаться?
cyborg (2005-12-08 10:53:00) [35]
> [8] Digitman © (08.12.05 10:49)
В потоке нужно добавлять строку к уже имеющейся строке. Понимаю, что нужно это дело как-то синхронизировать. Как и чем не знаю. Я ожидал здесь какую нибудь ссылку на статью или названия функций.
Но как нередко бывает пришёл остроум.
Digitman (2005-12-08 10:49:00) [36]
> cyborg © (08.12.05 10:38) [6]
> Как правильно
Если у тебя есть какие-то сомнения насчет "правильности" чего-то там, иллюстрируй их фрагментом своегокода с комментариями.
Reindeer Moss Eater (2005-12-08 10:44:00) [37]Работают с трудными подростками, а обращаются к старшим по званию.
А у переменных просто читают занчения и присвают им значения.
cyborg (2005-12-08 10:38:00) [38]Слушай, у меня не входило в планы развлекаться или развлекать других в этой ветке. Умник. Читать научись. Написано по русски - "Как правильно работать с переменными в потоке?". Иди развлекайся в другую тему.
Reindeer Moss Eater (2005-12-08 10:29:00) [39]Вопрос внятный задай, умник. А БлЕстать или блЯстать дома будешь перед мамой.
cyborg (2005-12-08 10:23:00) [40]Ты заблуждаешься.