|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||||
Указатель указателя или Наследовать14.08.2020, 12:42. Показов 9534. Ответов 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,554
|
|||||
| 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,554
|
||
| 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,554
|
||||||
| 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
|
||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 02.09.2020, 14:00 | |
|
1
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 02.09.2020, 16:31 [ТС] | ||
но вы вроде сами советовали - усыпить, потом разбудить (когда надо опять его использованть)... пока не нашла как?..насчёт detach - верю - экстремально... (но менее экстремально, чем убить сокет ... просто http.Abort() достаточно)
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 02.09.2020, 16:59 | |||
|
detach - не надо делать. Добавлено через 46 секунд
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||
| 02.09.2020, 19:50 [ТС] | |||||||
|
Кликните здесь для просмотра всего текста
давайте не будем придираться к словам...ссылку на совет "не удалять поток, а усыплять его и будить при необходимости" не оставлю - искать надо... НО чтобы будить - надо ведь, наверно, чтобы условно listener, спящий, - слушал сигнал, который даст разрешение проснуться... т.е. каждые, например sleep(250) - false awakening у него, чтобы были... типа того, полагаю... ну да ладно - дочитаю у Вильямса - когда дойду до практики... p.s. но о вашем совете - ещё, конечно же, подумаю... спасибо
0
|
|||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 02.09.2020, 21:34 | ||||
|
Добавлено через 2 минуты Добавлено через 5 минут Это худшее, что может произойти. В общем и целом посыл такой: я не понимаю при чем тут усыпление потока к моим словам про detach. В общем случае это ортогональные вещи. Поэтому возражения "но вы сами советовали..." мне не понятны. Пример из блога - иллюстрация, которая показывает эмуляцию join. Это не значит, что при любом использовании condition variable обязательно нужен detach. Это ниоткуда не следует и ни автором блога, ни мной в виду не имелось.
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||
| 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
|
|||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 03.09.2020, 11:19 | ||||
|
Все уже отвечено по нескольку десятков раз. Поищите. Вот Thread на стеке или вот Создание потока для вызова метода класса Добавлено через 8 минут
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 03.09.2020, 13:58 [ТС] | |
|
... коль ветка начинает скатываться к обсуждению субъективных прав... напомню лишь, что суть проблемы была в организации communication в рамках с учётом нескольких потоков и силами U++... и линки по ветке - были ответами на возможности both по-быстрому & по-правильному по науке...
разбивка на классы добавляет сложностей в этом взаимодействии M и V... но и определяет пути для рефакторинга... остальное - дело вкуса... и сложности потребностей...
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 03.09.2020, 14:01 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 03.09.2020, 14:32 [ТС] | |||
|
Дипломатия - превыше всего
![]()
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 03.09.2020, 14:33 | |
|
JeyCi, где ж тут паттерны? Выше даны ссылки на объяснение в процессе дискуссии чем чревато использование detach в неподготовленном окружении. Все показано, рассказано.
И что такого произошло недипломатичного? Я мог бы у вас попросить того же, потому что выше я просто озвучил свою позицию. За столько лет на форуме не всегда нужно повторять что-то еще раз. Это занимает много времени, а кто мне его вернет? Поэтому если я что-то и заявляю изначально "бездоказательно", то только лишь в расчете на вопрос "почему". Обратите внимание, что как только вы его задали, я выдал вам ссылки. Не нужно эмоционально реагировать. В моих постах нет эмоций, только расчёт. Если вы прочитаете их спокойным тоном, без приписывания мне агрессии - это станет понятно.
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||
| 03.09.2020, 15:01 [ТС] | |||||
|
в принципе варианты, как и ваш view уже вроде все озвучены... и ваш совет из прошлой ветки:
0
|
|||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 03.09.2020, 15:18 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 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,554
|
|
| 04.09.2020, 17:53 [ТС] | |
вышла из deadlock'a , закрыла поток... на том, что было... альтернативные варианты архитектуры ещё покручу
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 06.09.2020, 18:40 [ТС] | |
|
0
|
|
| 06.09.2020, 18:40 | |
|
Необходимость указателя на указатель Разыменование указателя на указатель Инкремент указателя на указатель
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|