0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
||||||
1 | ||||||
Освобождение памяти в многопоточной функции19.10.2019, 20:52. Показов 2895. Ответов 20
0
|
19.10.2019, 20:52 | |
Ответы с готовыми решениями:
20
Указатели. Освобождение памяти в функции Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение Резервирование памяти/освобождение памяти для трехмерного массива Освобождение памяти в отдельной функции |
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
|
19.10.2019, 21:11 | 2 |
tanya1179, освобождать память в вашем случае должен тот, кто
UserEvent получает.Если эти данные только читаются получателем (в смысле не он не принимает владение ими), то можно освобождение сделать в деструкторе UserEvent.
1
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
||||||
19.10.2019, 21:29 [ТС] | 3 | |||||
UserEvent определен вот так:
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
||||||
19.10.2019, 22:21 | 4 | |||||
tanya1179, Лучше сделать как-то так:
У MESCALL тоже нужен деструктор, чтобы почистить pData. Если MESCALL - это сторонняя сишная структура, которую нельзя менять, то вопрос можно решить написав правильный deleter для unique_ptr (который перед удалением самого объекта MESCALL, сначала проверит и освободит буфер pData).
1
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
||||||
19.10.2019, 22:32 [ТС] | 5 | |||||
Структура MESCALL вот такая:
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
||||||
19.10.2019, 22:36 | 6 | |||||
Сообщение было отмечено tanya1179 как решение
Решение
1
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
|
19.10.2019, 22:41 [ТС] | 7 |
Спасибо огромное! Это просто исчерпывающе!
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
|
19.10.2019, 22:43 | 8 |
tanya1179, для unique_ptr на забудьте #include <memory>.
Некоторое замечание по этому коду: у вас может все сломаться, если вы попытаетесь передавать LPARAM от полученного Event`а (в месте обработки) куда-то, где он будет использоваться дольше, чем живет объект события. Учитывайте это. Мне отсюда может быть не видно всех деталей.
1
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
|
20.10.2019, 00:13 [ТС] | 9 |
Спасибо, учту обязательно. Код достался мне в наследство, еще в нем разбираюсь)
..
0
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
|
21.10.2019, 13:44 [ТС] | 10 |
Попробовала это решение, но есть одно но! Я не могу использовать с++11, поэтому unique_ptr мне не доступен, к сожалению.
Помогите найти решение без него.
0
|
фрилансер
5498 / 5094 / 1047
Регистрация: 11.10.2019
Сообщений: 13,341
|
|
21.10.2019, 13:48 | 11 |
tanya1179, IDE какая ?
0
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
|
21.10.2019, 14:03 [ТС] | 12 |
gcc 3.4.3, qt-3.3
0
|
фрилансер
5498 / 5094 / 1047
Регистрация: 11.10.2019
Сообщений: 13,341
|
|
21.10.2019, 14:07 | 13 |
tanya1179, а чего Qt такая древняя? В Qt есть класс QSharedPointer , но я не знаю, когда его ввели
udp - Этот класс был введён в Qt 4.5.
0
|
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
|
||||||
21.10.2019, 14:08 | 14 | |||||
0
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
|
21.10.2019, 14:11 [ТС] | 15 |
В qt-3.3 нет QSharedPointer еще, он только в 4-ой появился
0
|
фрилансер
5498 / 5094 / 1047
Регистрация: 11.10.2019
Сообщений: 13,341
|
|
21.10.2019, 14:13 | 16 |
tanya1179, а вот ещё вопрос. Я так понял, ты в пределах одного приложения отправляешь сообщение, содержащее экземпляр типа MESCALL. Может, стОит заменить на глобальную очередь (синхронизированную, если многопоточка).
0
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
|
21.10.2019, 14:17 [ТС] | 17 |
Приложение писала не я, оптимизировать пытаюсь, можно попробовать в синхронизированную очередь все сложить, посмотреть , не будет ли тормозить...
0
|
фрилансер
5498 / 5094 / 1047
Регистрация: 11.10.2019
Сообщений: 13,341
|
|
21.10.2019, 14:19 | 18 |
tanya1179, тормозить там нечему. Принимающая сторона в таймере (интервал зависит от задач) или в своём потоке вытаскивает сообщения и обрабатывает
0
|
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 11
|
|
21.10.2019, 14:23 [ТС] | 19 |
Спасибо, попробую
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,281
|
||||||
21.10.2019, 18:38 | 20 | |||||
Сообщение было отмечено tanya1179 как решение
Решение
Такие важные вещи стоит сразу указывать.
Вот код для С++03. Кликните здесь для просмотра всего текста
1
|
21.10.2019, 18:38 | |
21.10.2019, 18:38 | |
Помогаю со студенческими работами здесь
20
Освобождение памяти, выделенной под переменную во внутренней функции Освобождение памяти Освобождение памяти Освобождение памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |