Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547

Указатель указателя или Наследовать

14.08.2020, 12:42. Показов 9176. Ответов 111
Метки нет (Все метки)

здесь
я вот тоже подумала (про своих баранов) - если у меня 2 thread'a (gui и secondary) и в secondary задан классом (как здесь), в котором работает функция, которая отдаёт массив в класс, ход обработки массива методом этого (куда отдаёт) класса - отразить в gui хочется... !?!
вот передаю указатель на Form из класса gui в класс secondary worker thread... (как по примеру #222)
а дальше?..
указатель на указатель параметром в др класс передавать? (что-то не проходит)?
передаю банально:
C++
1
2
3
4
5
6
public:
    const Vector<Vector<String>> & m_vUrls;
    MyAppWindow* m_pw;
    
    // Constructor  
    loadV(const Vector<Vector<String>>& spisok, MyAppWindow* m_pw);
ну или **
как не пытаюсь передать указатель на указатель или тот же указатель на gui в др класс - выдаёт, что инициализация gui возможна только в первичном потоке...
- а ведь только передать хочу указатель на то, что уже было проинициализировано в первичном потоке... т.е. на сам gui
ИЛИ ???
может, мне лучше наследовать 2-й класс (loadV) от класса worker и в нём поле "принятый из gui указатель" сделать protected?
(чтобы не заморачиваться передачей указателя на gui и уж тем более транслированием в gui поток из класса, куда передаём массив после его сбора в классе worker - который во вторично потоке от gui)...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2020, 12:42
Ответы с готовыми решениями:

Сохранить адрес из указателя в другой указатель, а потом первый указатель удалить
Добрый день всем. Возмём простейший пример: #include &lt;iostream&gt; using namespace std; int main() { int* p1 = new...

Передача умного указателя в функцию принимающую указатель на указатель
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

111
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
06.09.2020, 19:30
Цитата Сообщение от JeyCi Посмотреть сообщение
вот такой ответ п.8 меня достаточно убеждает
А чем не устроили подобного рода пример и доводы (гораздо более конкретные и детализированные) по ссылке выше?
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
08.09.2020, 13:36  [ТС]
не той степенью соответствия моим текущим задачам

Добавлено через 1 минуту
... и наверно подачей

Добавлено через 6 минут
и наверно п.7.3 современного Майеррса немножко отвлёк
Депайте std : : thread неподкпючаемым (unjoinaЬle) на всех путях выпопнения
... или до конца не могу его правильно понять?
(потому что читаю на русском языке - вот и сомневаюсь в словах и их (не)возможных синонимах)

Добавлено через 4 часа 9 минут
всё поняла и его -
здесь происходит то, что он хочет:
t . join ( ) ; // Делаем t неподключаемым
а не через detach...
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
09.09.2020, 15:54  [ТС]
главный ВЫВОД на все времена (уже прозвучавший):
Цитата Сообщение от Croessmah Посмотреть сообщение
распараллеливать задачи нужно так, чтобы они не требовали синхронизации, либо чтобы имели минимальные точки соприкосновения. В ином случае вы получите мало крупногранулярных блокировок и потоки будут ждать друг-друга постоянно, либо получите дохреналиард мелкогранулярных блокировок, что тоже ни к чему хорошему не приведет, начиная с снижения производительности и заканчивая неуловимыми багами.
всем спасибо!
p.s.
(invalid register rax ещё остаётся)
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
11.09.2020, 18:48  [ТС]
... и особенности U++ в части владения объектом (по сравнени с тем же Qt) -- всё может быть, что как раз это и упустила... поэтому и крашится в Dtor'e...
имхо
p.s.
и в принципе их совет здесь:
I think U++ owning system is far more efficient than ordinary approach. So I wouldn't recommend embed QT-style management of controls.
1
22.09.2020, 09:21  [ТС]

Не по теме:

Цитата Сообщение от JeyCi Посмотреть сообщение
поэтому и крашится в Dtor'e...
потерянный указатель, приводящий к memory leaks, - банально пришёл из OpenSSL -
- настройки U++ BuildMethod по умолчанию => в MT-коде избавляют от этой неприятности... или маскируют?..

0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.09.2020, 11:36
Цитата Сообщение от JeyCi Посмотреть сообщение
или маскируют
маскируют.
2
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
22.09.2020, 19:41  [ТС]
но ведь, когда app выгружается из памяти (окно закрывается) - то вся память возвращается?.. или только после перезагрузки компа?
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
23.09.2020, 12:08  [ТС]
и ответ под рукой
Никаких причин освобождения памяти перед завершением программы, кроме чисто эстетических, нет.Память всё равно вернётся системе после смерти процесса.
Однако, довольно часто объекты в своём деструкторе совершают дополнительные действия. Закрывают транзакцию в базе данных, корректно закрывают онлайн-сессию, сбрасывают изменённые данные на диск и т. п. Таким образом, если такой объект «утечёт», то программа после завершения оставит что-то в некорректном состоянии.
если app работает 24/7 - то, конечно, может дать о себе знать...
хотя лучше делать "эстетически" в любом случае

Добавлено через 8 минут
p.s.
какого-нибудь memory_profiler в U++ явно не хватает, не знаю, как в др ide (в VS получше)...
хорошо, хоть есть HttpRequest::Trace()
1
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
23.09.2020, 16:03
Цитата Сообщение от JeyCi Посмотреть сообщение
а не через detach...
Вы не правильный вывод сделали.
Если хотите выполнить это условие:
Депайте std : : thread неподкпючаемым (unjoinaЬle) на всех путях выпопнения
и чтоб GUI не завис, у вас вариант только detach.
2
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
23.09.2020, 18:13  [ТС]
Цитата Сообщение от GoshaM Посмотреть сообщение
Вы не правильный вывод сделали.
я просто прочитала более внимательно - как Майерс написал
t . join ( ) ; // Делаем t неподключаемым
- или те, кто его переводил...
Цитата Сообщение от GoshaM Посмотреть сообщение
и чтоб GUI не завис, у вас вариант только detach.
не вижу связи?... делаю join, и ничего не виснет... а с этого момента - всё очень спорно!... я ведь не делаю join с кнопки btn_Start (вы правы тут если join - то виснет - точнее блокируется в ожидании присоединения потока), а только с кнопки btn_Stop... но можно cv'ами отлавливать... но до неё ещё дойти надо...
пока не освобождаются ресурс от этого OpenSSL... думаю, как красиво сделать... да и по-фэншую cancellation организовать не от Thread'a, а от CoWork (U++) - есть ещё с чем экспериментировать... всё равно exception'ы надо обработать как-то... да и на U++ forum видела мысль - выходить на exception'ах - чтобы гарантированно все ресурсы закрывались... вобщем ещё в раздумьях... со временем не очень

Добавлено через 10 минут
Цитата Сообщение от JeyCi Посмотреть сообщение
мысль - выходить на exception'ах - чтобы гарантированно все ресурсы закрывались...
но что-то сомневаюсь, что в MT OpenSSL U++ подчищает за собой память...

Добавлено через 24 минуты
Цитата Сообщение от JeyCi Посмотреть сообщение
не вижу связи?...
увидела связь - кнопка btnStopped ожила... Благодарю!... но ещё подумать надо над общей архитектурной концепцией

Добавлено через 11 минут
p.s.
Форд, Парсонс, Куа: Эволюционная архитектура. Поддержка непрерывных изменений
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
26.09.2020, 15:17  [ТС]
норм... почти
но Уильямса дочитать надо - и закрывать поток до удаления объекта thread при любом исходе (норм или exception).
Всем спасибо! - и этому и этому советам...
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
26.09.2020, 15:20
Цитата Сообщение от JeyCi Посмотреть сообщение
Указатель указателя или Наследовать
почему твоя тема называется Указатель указателя или Наследовать, какая связь между двойным указателем и наследованием? Можешь приложить немного усилий и рассказать мне кратко но строго по делу?
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
26.09.2020, 16:10  [ТС]
Цитата Сообщение от _stanislav Посмотреть сообщение
почему
не знала - наследовать (чтобы передать свойство/метод от родителя) или передавать через класс (сторонний), указатель указателя, свойство/метод в 3-й класс...
вобщем оказалось нужен Функтор - для обращения к методу класса (хоть своего, хоть чужого)...
название темы от незнания... но точки расставлены над i...
p.s.
и для ликбеза ещё идиомы полистаю (или здесь) - чтобы правильно использовать указатели, зоны видимости, время жизни объектов
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
26.09.2020, 16:22
Цитата Сообщение от JeyCi Посмотреть сообщение
наследовать (чтобы передать свойство/метод от родителя)
знаешь как я понимаю, Наследовать, значит брать более абстрактные свойства, методы и их конкретизировать.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
26.09.2020, 19:32  [ТС]
вот и говорю, что от незнания, хотела припаять, что-то вроде увиденного
TestThread::TestThread() : isInterruptionRequested(false)
но такой трюк похоже срабатывает только при наследовании от простого типа, например, bool, как здесь...
Наследование описывает связь «является» (или по-английски «IS A»).
- вот нормального понимания теперь и буду придерживаться...

Добавлено через 3 минуты
p.s.
в противовес HAS-A отношению (аггрегации)

Добавлено через 2 часа 46 минут

Не по теме:

Цитата Сообщение от JeyCi Посмотреть сообщение
да и по-фэншую cancellation организовать не от Thread'a, а от CoWork (U++) - есть ещё с чем экспериментировать...
"CoWork is intended as a tool for simple loop paralelization." - поэтому если его (loop paralelization) нет, например, в WorkerThread - то и с фэн-шуем давно пора завязывать... - ветка своё предназначение выполнила!

1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
26.09.2020, 21:10
Цитата Сообщение от JeyCi Посмотреть сообщение
но такой трюк похоже срабатывает только при наследовании от простого типа, например, bool, как здесь...
От "простых" типов вообще нельзя наследоваться.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
27.09.2020, 10:38  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
От "простых" типов вообще нельзя наследоваться.
а что это, если не наследование?
Цитата Сообщение от DrOffset Посмотреть сообщение
TestThread::TestThread()
: isInterruptionRequested(false)
здесь
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
27.09.2020, 10:50
Цитата Сообщение от JeyCi Посмотреть сообщение
а что это, если не наследование?
Это инициализация.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,547
27.09.2020, 11:53  [ТС]
значит Это эквивалентно конструктору
C++
1
2
3
TestThread::TestThread() {
   bool isInterruptionRequested=false;
}
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
27.09.2020, 12:52
Цитата Сообщение от JeyCi Посмотреть сообщение
значит Это эквивалентно конструктору
Не такому
C++
1
2
3
TestThread::TestThread() {
   bool isInterruptionRequested=false;
}
, а такому:
C++
1
2
3
TestThread::TestThread() {
   isInterruptionRequested=false;
}
isInterruptionRequested - это член класса.

В моем примере std::atomic<bool>. Сначала будет инициализация по умолчанию (С++20), затем еще присваивание в теле.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.09.2020, 12:52

Необходимость указателя на указатель
Добрый день. Не могу разобраться, подскажите пожалуйста для чего в нижеприведенном методе(занесение узлов в двоичное дерево) используется...

Разыменование указателя на указатель
в функцию передается указатель на указатель класса, что бы получить доступ к методам класса нужно разименовать указатель так ? MyClass...

Инкремент указателя на указатель
Добрый день!!! Ребят, подскажите пожалуста, как выполнить инкремент указателя на указатель. Программа аварийно завершается. Я так понимаю,...

Передача указателя на указатель в функцию
Вопрос к знатокам: Есть абстрактный класс(Symbol) и его производный (Cross). Создаю указатель этого абстрактного класса(Symbol *first) ,...

Передача в функцию указателя на указатель
Добавление нового элемента в начало списка: void Add_Beg(List **u, Data &amp;x) // Почему в 1 аргументе функции указатель на указатель? { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru