|
4 / 3 / 1
Регистрация: 23.12.2013
Сообщений: 39
|
|
RAD XE3+ Можно ли обратиться из двух разных потоков к полям другого класса?18.12.2023, 00:03. Показов 2063. Ответов 32
Метки нет (Все метки)
Добрый день! Имеется ПОТОК1 и ПОТОК2 (TThread). Есть Класс1 отнасследованный от TObject.
Суть в том что в Потоке1 происходит заполнение Поля Класс1.msg1. Далее Поток1 делает синхронизацию Вызывает метод Класс1.Sync в данном методе по мере необходимости происходит копирование Класс1.msg2 := Класс1.msg1; ПОТОК2 Обрабатывает то что находиться Класс1.msg2, но это делает тогда когда точно не происходит Копирования msg1 в msg2. Т.е. одновременного обращения записи/чтения к одному и тому же полю из разных потоков класса1 отсутствует. Но мне не понятно, могу ли я вообще обращаться к одному классу из разных потоков? Это может привести к какой-то ошибке? Или все таки нельзя обращаться к одному классу из двух потоков, даже если поля разные?.
0
|
|
| 18.12.2023, 00:03 | |
|
Ответы с готовыми решениями:
32
Возможно ли члену класса обратиться к полям другого класса в котором он находится?
Как можно обратиться к wpf контролам из другого класса |
|
Модератор
4155 / 2364 / 814
Регистрация: 15.11.2015
Сообщений: 9,501
|
||
| 07.07.2024, 14:38 | ||
|
0
|
||
|
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
|
||
| 07.07.2024, 15:02 | ||
|
Экземпляр имеющий внутри себя динамический массив, сменит только указатель на "конкретное измерение" если ему не будет хватать непрерывной памяти? Либо если это что-то "самодельное", на основе статических массивов(для скорости) и требует переинициализации при изменении размеров(конечно пример немного притянут, но мы в фоне сначала скопируем все поля объекта в текущем их состоянии, а потом заменим ссылку на него)? Я вообще к тому что гарантии никто не даёт, и доступ к указателю на экземпляр никто не советует разграничивать крит. секцией, ибо тогда все плюсы многопоточности потеряются... но потоки таки читают начальный адрес экземпляра по указателю? Если мы руками не прописываем запомнить в локальной переменной потока нужный адрес, то каждый раз будет чтение указателя на экземпляр класса не защищённое крит. секцией?
0
|
||
|
Модератор
4155 / 2364 / 814
Регистрация: 15.11.2015
Сообщений: 9,501
|
||||||||||||
| 07.07.2024, 16:17 | ||||||||||||
Но если сделать
a: TIntArray; который уже содержит адрес данных. И даже если поменять размер массива, то доступ к данным останется. Ну и обращаться к массиву нужно через синхронизацию, конечно, а то не исключена смена адреса массива во время обращения к нему потока. Тогда хорошо, если выскочит AV.
1
|
||||||||||||
|
|
|
| 07.07.2024, 18:00 | |
|
верно
продолжая аналогию с адресами, надо иметь не сам адрес, а место, где этот адрес будет лежать, в случае когда путешественник часто переезжает, но адрес своего текущего места хранит где-то и уже вот это место точно не меняется и еще раз - менеджер не может ничего поменять сам только по команде
0
|
|
|
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
|
|||
| 07.07.2024, 18:38 | |||
|
Но стоит вызвать ф-цию канваса, и хендл уже invalid поскольку менджер памяти перевыделил её, а мог бы подставить по прежнему указателю или обновить его. тут уже я не берусь судить насколько это правильно... вроде на ровном месте затраты на выделение новых адресов и удаление старых. Добавлено через 3 минуты
0
|
|||
|
Модератор
4155 / 2364 / 814
Регистрация: 15.11.2015
Сообщений: 9,501
|
|||
| 07.07.2024, 18:53 | |||
|
0
|
|||
|
|
||
| 07.07.2024, 19:31 | ||
|
handle - это ID системного(!) ресурса, которым оперирует ОС Поэтому для операций, где важна консистентность, мы обязаны его ЗАПРОСИТЬ(ЗАЛОЧИТЬ)! и ОТПУСТИТЬ! В данном случае МП по отношению к ОС ведет себя как программа по отношению к МП. При этом ОС залоченную память тоже не сменит. И залоченный хендл не поменяет. МП берет большие куски памяти у ОС, получая на них хендлы, и потом отдает. Медленно. А нам выдает по требованию. Быстро. Вот все для чего он нам нужен. Но сам ничего поменять не может
1
|
||
|
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
|
|||||
| 08.07.2024, 13:28 | |||||
|
Добавлено через 4 минуты Добавлено через 1 минуту
0
|
|||||
|
|
||
| 08.07.2024, 14:36 | ||
|
Память картинки, если эта картинка - системный ресурс (а в VCL это именно так) - закрыта
Поэтому берем хендл и далее по списку... В частности, потому что все форматы и JPEG и PNG ложатся в единый системный bmp, с которым GDI только и умеет работать. В FMX уже ввели TBitmapSurface - там просто голые данные, никто их не заберет. Нужен контекст У каких-то объектов поля все время текут Например List будет все время изменять свой внутренний массив, т.е. ссылка на него будет меняться поэтому надо лочить сам List, брать массив, делать что-то , отпускать List. Со строкой, насколько я помню, еще интереснее. Объект может поменять поле-строку, в этом случае ссылка на нее изменится, но предыдущая ссылка будет содержать старую строку. Без AV.
0
|
||
|
Модератор
4155 / 2364 / 814
Регистрация: 15.11.2015
Сообщений: 9,501
|
|||
| 08.07.2024, 14:45 | |||
|
При старте программы создал bitmap нужного размера, записал адрес начало битов в свою переменную и затем рисую на этом bitmap как средствами canvas, так и напрямую пишу в память - работает без проблем.
0
|
|||
|
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
|
||||
| 08.07.2024, 15:31 | ||||
|
(так собственно всё и работает, и до первого косяка вникать что под капотом реализации не нужно )Если коротко то нужно было нарисовать рамку на распознанном на картинке объекте, я долго не мог понять почему появлялись AV... А сделано было так begin Читаем память картинки напрямую, распознаём; Рисуем рамку или сдвигаем окно если не удалось. Проверяем некое условие нужно ли повторить и так по кругу. end В итоге пришлось изменить на запоминание позиций, и уже потом, после распознования, рисование рамок после всех действий во втором отдельном цикле. Сам код я не найду но запомнил этот момент навсегда, час потратил наверное на написание десятка разных проверок чтобы понять в чём дело. Все 10 условных параллельных потоков могут?! одновременно обратится к указателю на экземпляр класса ведь это не разграничено крит секцией, а если разграничить то не будет многопоточности.
0
|
||||
|
Модератор
4155 / 2364 / 814
Регистрация: 15.11.2015
Сообщений: 9,501
|
||||
| 08.07.2024, 16:13 | ||||
|
Хотя, не вижу препятствий для чтения всеми потоками и из одной переменной, при условии, что эта переменная будет жива всё время работы потоков. Читайте на здоровье, тем более, если эта переменная считывается за одно чтение, то вообще нет проблем. А вот с тем же динамическим массивом уже нужны меры, а то, пока один поток читает данные, другой поток вздумает изменить размер массива и он "переедет" по другому адресу памяти, тогда, первый поток может получить AV.
1
|
||||
|
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
|
||
| 08.07.2024, 16:38 | ||
|
Спасибо.
0
|
||
| 08.07.2024, 16:38 | |
|
Как обратиться к полям класса? Доступ к полям класса через переменные другого класса Проблема с обращением к полям класса из другого класса Из одного класса обратиться к свойству progressBar из другого класса (основного окна) Как обратиться к значениям переменной одного класса из метода другого класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|