|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||||
Указатель указателя или Наследовать14.08.2020, 12:42. Показов 9206. Ответов 111
Метки нет (Все метки)
здесь
я вот тоже подумала (про своих баранов) - если у меня 2 thread'a (gui и secondary) и в secondary задан классом (как здесь), в котором работает функция, которая отдаёт массив в класс, ход обработки массива методом этого (куда отдаёт) класса - отразить в gui хочется... !?! вот передаю указатель на Form из класса gui в класс secondary worker thread... (как по примеру #222) а дальше?.. указатель на указатель параметром в др класс передавать? (что-то не проходит)? передаю банально:
как не пытаюсь передать указатель на указатель или тот же указатель на gui в др класс - выдаёт, что инициализация gui возможна только в первичном потоке... - а ведь только передать хочу указатель на то, что уже было проинициализировано в первичном потоке... т.е. на сам gui ИЛИ ??? может, мне лучше наследовать 2-й класс (loadV) от класса worker и в нём поле "принятый из gui указатель" сделать protected? (чтобы не заморачиваться передачей указателя на gui и уж тем более транслированием в gui поток из класса, куда передаём массив после его сбора в классе worker - который во вторично потоке от gui)...
0
|
||||||
| 14.08.2020, 12:42 | |
|
Ответы с готовыми решениями:
111
Как получить ссылку на указатель или указатель на указатель в массиве? |
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 31.08.2020, 18:46 | ||
|
Добавлено через 7 минут Опять же, в случае Qt мьютексы автоматически ставятся на разграничение записи и чтения из очереди (иначе возможна "гонка" между потоками, с недозаписыванием/недосчитыванием элемента).
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||
| 31.08.2020, 20:49 [ТС] | |||||
|
вы, наверно, имели ввиду этот его вариант
)...а то как-то ни передача ссылки, ни захват контекста - не дают адекватной обратной связи (от gui к потоку)... надо пробовать, как здесь , наверно??... потому что, если послать ещё можно попробовать Event'ом U++... но отловить во вторичном потоке смену флага isInterruptionRequested (да даже не в потоковой функции, а в классе, чей объект работает в этой потоковой функции) - как-то пока ...вот и интересуюсь - а как там по стандарту - синхронизировать? или лямбдой можно справиться? (захватывая контекст)... всё равно путь от gui до member-method'а класса через вторичный поток -- ой какой-то далёкий ![]() вот и изложила свои сомнения... Добавлено через 8 минут наверно, действительно, пока объект крутит в себе свой метод - залезть туда с переменной из другого потока не так-то легко - тут уж очередь event'ов (в отличие от gui) отсутствует... ![]() Добавлено через 2 минуты хотя event в U++ - это обычный коллбэк...
0
|
|||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||
| 01.09.2020, 10:20 [ТС] | ||
|
хотя и это тоже надо в жизни... а ведь с сокетами всё должно быть проще ... закрываем и объект сам вернёт error на вызывающую сторону... которую просто обработать и return из потоковой функции, даже Thread::Shutdown не надо делать экстренно по кнопке с bStopped... и уж тем более передавать этот bStopped...p.s. хотя, конечно, если сокет открыт во вторичном потоке - то, может, и надо туда постучать из gui под мьютексом??.. но что-то мне кажется, что сокет из любого потока виден без мьютексов... просто убить/закрыть его... имхо... чего уж тут что-то локировать для передачи message'ей или дёргать volatile Atomic bStopped... p.p.s. и с коллбэками - как возможностью независимого исполнения кода - действительно, становится не страшно, когда смотришь на лямбду, как положено, - т.е. как на анонимную функцию... Vector<Event<>> cb; - тоже удобно в U++
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||||
| 02.09.2020, 11:27 [ТС] | ||||||
Добавлено через 2 минуты и с удобным Фреймворком - и того не надо... just use objects! это я к тому, что Декомпозиция нужна - только если, действительно, упрощает either чтение кода or его сопровождение... ============================= Добавлено через 1 час 34 минуты Ctrl::Call - чувствовала я, что &ConditionVariable надо как-то впаять... а он то уже есть...Добавлено через 2 часа 43 минуты ИТОГО: ...а там надо обработать нажатие кнопки stop, вернуть false в вызывающий поток, завершить в нём функцию... и, наверно, отправить в detach ...по ходу отловить его при новом старте, вероятно, через тот же ConditionVariable... т.к. в любом случае новое создание/уничтожение потока - дорого стОит... p.s. только , вероятно, где-то потеряла какой-то pointer или reference... т.к. error на Destructor'e главного окна предупреждает о том, что "возникшая проблема привела к прекращению работы программы. закройте эту программу"опять чьё-то "время жизни", наверно
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 02.09.2020, 14:00 | |
|
1
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||
| 02.09.2020, 16:31 [ТС] | ||
но вы вроде сами советовали - усыпить, потом разбудить (когда надо опять его использованть)... пока не нашла как?..насчёт detach - верю - экстремально... (но менее экстремально, чем убить сокет ... просто http.Abort() достаточно)
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 02.09.2020, 16:59 | |||
|
detach - не надо делать. Добавлено через 46 секунд
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||||
| 02.09.2020, 19:50 [ТС] | |||||||
|
Кликните здесь для просмотра всего текста
давайте не будем придираться к словам...ссылку на совет "не удалять поток, а усыплять его и будить при необходимости" не оставлю - искать надо... НО чтобы будить - надо ведь, наверно, чтобы условно listener, спящий, - слушал сигнал, который даст разрешение проснуться... т.е. каждые, например sleep(250) - false awakening у него, чтобы были... типа того, полагаю... ну да ладно - дочитаю у Вильямса - когда дойду до практики... p.s. но о вашем совете - ещё, конечно же, подумаю... спасибо
0
|
|||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 02.09.2020, 21:34 | ||||
|
Добавлено через 2 минуты Добавлено через 5 минут Это худшее, что может произойти. В общем и целом посыл такой: я не понимаю при чем тут усыпление потока к моим словам про detach. В общем случае это ортогональные вещи. Поэтому возражения "но вы сами советовали..." мне не понятны. Пример из блога - иллюстрация, которая показывает эмуляцию join. Это не значит, что при любом использовании condition variable обязательно нужен detach. Это ниоткуда не следует и ни автором блога, ни мной в виду не имелось.
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||
| 03.09.2020, 08:57 [ТС] | |||||
|
=== 1) просто detach, возможно тоже можно вернуть (по коду, пример которого приложила) - ещё не тестила этот подход... 2) про detach обсуждали - его бессмысленность сомнительна для меня пока - иногда можно себе и позволить (если разрабатываемый app ещё не претендует на супер-сложность)... 3) про усыпление - отдельная история - но если detach можно отловить cv-ом, то почему бы и не дать ему погулять или там же поспать (в отвязке)?... погулять, конечно, плохо - туда можно вклинить чужой (даже хакерский) код, наверно... [хотя реализация так себе, имхо, 1 поток можно и создать и join - и норм. недолго, уже если много - то стоит подумать о времени =>thread-pool'е] p.s. но всё-таки моменты неблокирующей реализации потоков - основной смысл интереса к этой теме - чтобы много асинхронного кода не давало по факту синхронного исполнения - хочу добиться и, действительной асинхронности и скорости и недорогого возврата результатов в основной рабочий поток - для дальнейшей обработки... и идеи пока есть! Добавлено через 4 минуты аргумент был лишь в прошлой ветке от oleg-m1973 - о limit in Windows ~500...
0
|
|||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 03.09.2020, 11:19 | ||||
|
Все уже отвечено по нескольку десятков раз. Поищите. Вот Thread на стеке или вот Создание потока для вызова метода класса Добавлено через 8 минут
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 03.09.2020, 13:58 [ТС] | |
|
... коль ветка начинает скатываться к обсуждению субъективных прав... напомню лишь, что суть проблемы была в организации communication в рамках с учётом нескольких потоков и силами U++... и линки по ветке - были ответами на возможности both по-быстрому & по-правильному по науке...
разбивка на классы добавляет сложностей в этом взаимодействии M и V... но и определяет пути для рефакторинга... остальное - дело вкуса... и сложности потребностей...
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 03.09.2020, 14:01 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||
| 03.09.2020, 14:32 [ТС] | |||
|
Дипломатия - превыше всего
![]()
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 03.09.2020, 14:33 | |
|
JeyCi, где ж тут паттерны? Выше даны ссылки на объяснение в процессе дискуссии чем чревато использование detach в неподготовленном окружении. Все показано, рассказано.
И что такого произошло недипломатичного? Я мог бы у вас попросить того же, потому что выше я просто озвучил свою позицию. За столько лет на форуме не всегда нужно повторять что-то еще раз. Это занимает много времени, а кто мне его вернет? Поэтому если я что-то и заявляю изначально "бездоказательно", то только лишь в расчете на вопрос "почему". Обратите внимание, что как только вы его задали, я выдал вам ссылки. Не нужно эмоционально реагировать. В моих постах нет эмоций, только расчёт. Если вы прочитаете их спокойным тоном, без приписывания мне агрессии - это станет понятно.
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||
| 03.09.2020, 15:01 [ТС] | |||||
|
в принципе варианты, как и ваш view уже вроде все озвучены... и ваш совет из прошлой ветки:
0
|
|||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 03.09.2020, 15:18 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||
| 03.09.2020, 16:04 [ТС] | ||
|
значит => чтобы иметь и обратную связь - мне надо также захватывать в окно и ссылку на worker'a... как и в worker'a я захватила ссылку на windows... (как GoshaM показывал) - ну в принципе работа над ошибками понятна по этой части... НО помимо захвата в коллбэк... надо потом ещё захватить в новый thread, открываемый этим коллбэком, кнопку btnStopped... пока понимаю так Добавлено через 3 минуты т.е. 1-й захват (в worker_Class) с коллбэка, продолжить 2-ым захватом (в start_work методе того worker_class'a строкой кода thr.Run([m_pw->btnStopped]{}))... чтобы потом нормально принимать btnStopped сигналы... имхо
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 04.09.2020, 17:53 [ТС] | |
вышла из deadlock'a , закрыла поток... на том, что было... альтернативные варианты архитектуры ещё покручу
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 06.09.2020, 18:40 [ТС] | |
|
0
|
|
| 06.09.2020, 18:40 | |
|
Необходимость указателя на указатель Разыменование указателя на указатель Инкремент указателя на указатель
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|