23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
|
1 | |
Деструкторы в других потоках15.04.2017, 13:39. Показов 3309. Ответов 22
Метки нет (Все метки)
Создаю класс, пихаю его в другой поток (moveToThread)
По коннекту запускаю его функцию, если поток запущен. Если что-то добавить в деструктор, компилятор пишет что-то вроде "не может быть удален из другого потока"... Так и должно быть? Как-то немного напрягает, что деструктор не запускается. А если я захочу удалить поток, по коннекту deleteLater() удалит содержимое класса за деструктор?
0
|
15.04.2017, 13:39 | |
Ответы с готовыми решениями:
22
Виртуальные деструкторы и функции Выполнение кода после того как будут выполнены методы в других потоках Деструкторы Деструкторы |
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
15.04.2017, 13:41 | 2 |
Программу покажи.
0
|
23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
||||||||||||||||||||||||||
15.04.2017, 14:51 [ТС] | 3 | |||||||||||||||||||||||||
mainwindow.cpp
Т.е. вот функция из taskthread.cpp
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
15.04.2017, 16:15 | 4 |
0
|
23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
|
15.04.2017, 16:21 [ТС] | 5 |
function *f; в привате taskthread.h
И дальше, да, я не создавал экземпляр его, но сейчас исправил и добавил в function.cpp f = new function; При вызове деструктора taskthread программа зависает (выдает такую ошибку... виндоус пытается устранить проблему...), т.е. при попытке удалить f
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
15.04.2017, 16:26 | 6 |
Ты слишком увлекаешься new. И f и Y - по одному экземпляру. Сделай их просто полями классов.
0
|
23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
|
15.04.2017, 16:41 [ТС] | 7 |
nmcf, полями - в смысле просто объявить без new?
А в чем ошибка была? Я вот просто так до сих пор и не понял... Вот создаешь что-нибудь через new - можно удалить, память очищается. А если не через new, то и удалить как-то нельзя... А это же плохо, память надо чистить...
0
|
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
|
|
15.04.2017, 16:52 | 8 |
Читайте про виды памяти, вот, например:
http://www.intuit.ru/studies/c... 976?page=6 Потом можно почитать про указатели, про это есть в любой книжке по с++
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
15.04.2017, 18:39 | 9 |
То удалится вместе с содержащим объектом.
Добавлено через 1 минуту Так она устранена или нет?
0
|
23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
|
15.04.2017, 18:41 [ТС] | 10 |
А так нет...
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
15.04.2017, 18:44 | 11 |
Значит, проблема с выделением/освобождением памяти, а не с потоками.
0
|
23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
|
17.04.2017, 15:10 [ТС] | 13 |
Ну я не нашел, как QVector2D вернул бы мне ссылку на строку или столбец. А работать я буду именно с ними. И вообще если я буду писать что-нибудь типа sum(X,Y,i), имея в виду, что я хочу в сложить i-е строки Х и У и заменить этой суммой i-ю строку Х, то в кэш загрузится вся матрица Y, ну вот и нафиг оно надо...
0
|
23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
|
17.04.2017, 16:26 [ТС] | 15 |
>>Ну я не нашел, как QVector2D вернул бы мне ссылку на строку или столбец.
>>Векторы лояльны к созданию в стеке и простому приравниванию, подробнее в документации. ммм...
0
|
23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
|
21.04.2017, 19:54 [ТС] | 17 |
Ну так и чем плох QVector<QVector<double>>?
Почитал внимательнее QVector2D И это воообщеее не то, что нужно. Насколько я понял, оно задает двумерный вектор (вектор на плоскости) А мне нужен не математический вектор. Мне нужна двумерная матрица. (ну... двумерный массив. Матрица n на m) Добавлено через 1 час 8 минут Ну и к слову... двухмерный вектор? Серьезно? Вместо простого QVector<double> с двумя ячейками, мы получаем несколько функций, типа нормировки вектора и нам приходится читать всю эту дичь в документации? При всем при том, что реализовать нормировку ну не сложно. Нет, это, наверное, может быть обосновано в графических задачах, но в вычислительных, где часто размерность векторов не 2х1, а куда, куда больше, это бред сивой кобылы.
0
|
21.04.2017, 21:10 | 18 |
wlmn, у тебя указатели на вектор. Указатели, Карл!
Это Qt аж 5. Не надо указатели на QVector. Хочешь передавать - просто приравнивай. Хочешь иметь ссылку - не создавай в своём потоке, а получай ссылку извне. Получаешь извне - используй мутексы, в любом случае нужно будет их иметь.
0
|
23 / 23 / 3
Регистрация: 05.02.2017
Сообщений: 207
|
|
21.04.2017, 21:34 [ТС] | 19 |
icpu, че, почему, че к чему...
Ну указатели и че? Почему не надо указателей? Почему не создавать в своем потоке, Карл.
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
21.04.2017, 23:40 | 20 |
Чтобы проблемы себе не создавать.
0
|
21.04.2017, 23:40 | |
21.04.2017, 23:40 | |
Помогаю со студенческими работами здесь
20
Деструкторы Деструкторы Деструкторы Конструкторы и деструкторы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |