|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.01.2013, 18:51 | #1 |
Форумчанин
Регистрация: 04.01.2011
Сообщений: 260
|
Как правильно из потока менять Переменные в другом потоке?
Добрый день. Есть следующий код потока
Код:
код помеченный как ВОПРОС1...3 через КС обращается к основному потоку. в случае обращения к объекту в основном потоке надо делать процедуру как метод класса. а в данном случае надо ли делать метод класса из обращения к ГП типа СТРОКА и к ЛЕЙБЛ на основной форме? |
09.01.2013, 10:33 | #2 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
создавать отдельный метод для обращения к глобальным переменным не требуется.а вот то,что бы обращаетесь к свойствам визуальных компонентов через поток,это неверно.там,где идет обращение к компонентам,этот код выносится в отдельный метод потока и вызывается в вашей процедуре через synchronize()
"ковыряю изнутри" (с)
|
09.01.2013, 17:42 | #3 |
Форумчанин
Регистрация: 04.01.2011
Сообщений: 260
|
3D Hunter, спасибо за подсказку, но:
а если глоб перем представляет собой объект, в частности СТЕК из Дженерик. тут как раз косяк был, когда через КС из потока вызывал метод этого класса(СТЕК.вставить). когда переделал вызов в отдельную процедуру в составе которой были КС, косяк полностьб пропал |
10.01.2013, 05:33 | #4 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
сделайте критическую секцию внутренней приватной переменой вашего класса-дженерика и в методе вставки используйте вхождение и выход из нее.это не только абстрагирует логику класса,но и избавит от необходимости помнить,где мы входили или выходили из секции.кроме того,использование классом своей секции в методах ускоряет работу в вашем случае,ибо эта секция используется внутри класса,а для глобальных нужд создается другая секция.старайтесь писать классы сразу потокобезопасными,если они будут использоваться более чем одним потоком.
"ковыряю изнутри" (с)
|
10.01.2013, 14:11 | #5 |
Форумчанин
Регистрация: 04.01.2011
Сообщений: 260
|
и все таки не понятно. вот у меня есть ГлобПерем СТЕК
Код:
по окончании цикла работы, строки накопившиеся в СТЕК потом обрабатываются в потоке, доступ опять через КС и gRestartLoadUrls.Pop мне что то совершенно непонятно каким образом сделайте критическую секцию внутренней приватной переменой вашего класса-дженерика и в методе вставки используйте вхождение и выход из нее написать процедуру с использованием СТЕК? в которой использовать КС? желательно пример, что то о таком вообще не читал |
11.01.2013, 11:21 | #6 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
type
tstack=class protected fRTL=trtlcriticalsection; public procedure add(); ... Procedure add(); begin try ENTERCRITICALSECTION(fRTL); <<ТУТ ВАШ КОД>> FINALLY leavecriticalsection(fRTL); end; end;
"ковыряю изнутри" (с)
|
11.01.2013, 11:22 | #7 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
критическую секцию сделайте классовой переменной.вот о чем хотел сказать.возможны ошибки,сейчас в армии и с телефона не очень удобно
"ковыряю изнутри" (с)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Доступ или создание объекта в другом потоке | Maks1978 | Общие вопросы C/C++ | 0 | 04.10.2012 13:51 |
Как приостаносить поток до события в другом потоке | Sionus | Помощь студентам | 2 | 30.03.2010 21:51 |
Как правильно делать запрос к mysql находящейся на другом сервере | Sarumjan | PHP | 1 | 27.02.2010 22:39 |
Как правильно Менять текстовые значения Аннотаций в Солиде | Stilet | Общие вопросы Delphi | 0 | 21.01.2009 16:51 |
Как правильно использовать переменные в процедурах | nikolai_P | Microsoft Office Excel | 22 | 15.05.2008 13:15 |