Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Есть готовые обертки для указателей с проверкой на существование объекта? / 25 сообщений из 57, страница 1 из 3
21.04.2018, 17:59
    #39634173
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Есть умные указатели, которые при выходе из области видимости удаляют объект. Но мне не надо удалять объект, а всего- навсего передать объект в другую подсистему и периодически анализировать удалили там его или пока нет. Другими словами, нужна обертка, у которой перегружены все операторы указателя + метод empty(), чтобы проверить валидность объекта.

Можно обойтись без велосипедостроения?
...
Рейтинг: 0 / 0
21.04.2018, 18:19
    #39634181
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Любопытно.

Если ты уже проанализировал .empty() и узнал что он пустой - какие твои действия дальше?
...
Рейтинг: 0 / 0
21.04.2018, 18:26
    #39634183
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
maytonЛюбопытно.

Если ты уже проанализировал .empty() и узнал что он пустой - какие твои действия дальше?

Я хочу это использовать в собственном барьере синхронизации: с помощью этого механизма я пойму, что задача, унаследованная от QRunnable, выполнена и удалена. В Qt есть такое неудобство: QThreadPool позволяет дождаться заврешения всех задач, не разделяя их по подсистемам (поскольку работа идет через статический объект QGlobalInstance). А я хочу создать возможность для каждой подсистемы анализировать выполненность только своих задач.
...
Рейтинг: 0 / 0
21.04.2018, 19:01
    #39634192
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
AlekseySQLНо мне не надо удалять объект, а всего- навсего передать объект в другую подсистему и
периодически анализировать удалили там его или пока нет.

Не надо ничего анализировать. Либо у твоих объектов контролируемое время жизни, либо
используется счётчик ссылок. Всё остальное - от лукавого.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.04.2018, 19:14
    #39634195
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
AlekseySQLЕсть умные указатели, которые при выходе из области видимости удаляют объект. Но мне не надо удалять объект, а всего- навсего передать объект в другую подсистему и периодически анализировать удалили там его или пока нет. Другими словами, нужна обертка, у которой перегружены все операторы указателя + метод empty(), чтобы проверить валидность объекта.

Можно обойтись без велосипедостроения?

Да. Это std::weak_ptr.
Из std::shared_ptr копируете в weak_ptr.
Пока объект существует, weak_ptr.lock() будет возвращать shared_ptr на него.
Когда объект удален, то lock() вернет пустой shared_ptr
...
Рейтинг: 0 / 0
21.04.2018, 19:53
    #39634203
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Dimitry SibiryakovНе надо ничего анализировать. Либо у твоих объектов контролируемое время жизни, либо
используется счётчик ссылок. Всё остальное - от лукавого.


Беда в том, что QThreadPool сам удаляет задачи. Я как-то попробовал написать delete для выполненной задачи и моя программа упала. А счетчики ссылок в умных указателях идут "в комплекте" с удалением объекта.
...
Рейтинг: 0 / 0
21.04.2018, 19:55
    #39634205
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Anatoly MoskovskyДа. Это std::weak_ptr.
Из std::shared_ptr копируете в weak_ptr.
Пока объект существует, weak_ptr.lock() будет возвращать shared_ptr на него.
Когда объект удален, то lock() вернет пустой shared_ptr

Тогда надо чтобы вторая подсистема работала с shared_ptr и не удаляла объект после окончания. А QThreadPool сам вызывает delete для задач, так что система упадет.
...
Рейтинг: 0 / 0
21.04.2018, 19:59
    #39634207
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Давайте по максимуму. Пускай все системы пишут с умными указателями.
...
Рейтинг: 0 / 0
21.04.2018, 20:04
    #39634210
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
maytonДавайте по максимуму. Пускай все системы пишут с умными указателями.

Хотя, я не пробовал запаковывать задачу в shared_ptr и так скармливать QThreadPool: возможно он делает проверки типа и в этом случае не будет вызывать delete...
...
Рейтинг: 0 / 0
22.04.2018, 11:19
    #39634307
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
maytonЛюбопытно.

Если ты уже проанализировал .empty() и узнал что он пустой - какие твои действия дальше?
Интереснее будет если проанализировать, что указатель не empty(), то что дальше? Вот если прикоснуться к нему оператором разыменования... :)
...
Рейтинг: 0 / 0
22.04.2018, 11:22
    #39634308
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
AlekseySQL... передать объект в другую подсистему и периодически анализировать удалили там его или пока нет....

ИМХО - у Вас совсем ДРУГАЯ задача. Вам нужна система подписчиков на удаление-добавление-редактирование объекта. И вся недолга...


удачи вам
(круглый)
...
Рейтинг: 0 / 0
22.04.2018, 12:32
    #39634325
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
petravmaytonЛюбопытно.

Если ты уже проанализировал .empty() и узнал что он пустой - какие твои действия дальше?
Интереснее будет если проанализировать, что указатель не empty(), то что дальше? Вот если прикоснуться к нему оператором разыменования... :)

Дальше надо ждать, передав процессорное время другим потокам. Зачем к нему чем- то касаться?
...
Рейтинг: 0 / 0
22.04.2018, 13:46
    #39634340
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
AlekseySQLДальше надо ждать, передав процессорное время другим потокам. Зачем к нему чем- то касаться?
Я говорил в общем, а вы не поняли моей шутки. Я писал про то как в одном потоке указатель проверяется на неравенство nullptr. И из этого делаются необоснованные выводы, в то время как второй поток обнуляет наш указатель.
...
Рейтинг: 0 / 0
22.04.2018, 14:32
    #39634344
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
petravЯ говорил в общем, а вы не поняли моей шутки. Я писал про то как в одном потоке указатель проверяется на неравенство nullptr. И из этого делаются необоснованные выводы, в то время как второй поток обнуляет наш указатель.
Связка share_ptr-weak_ptr не имеет эту проблему.
Но ТС не врубился как weak_ptr применить к его кейсу. Скорее всего он и вообще не понял еще чего он хочет добиться.
...
Рейтинг: 0 / 0
22.04.2018, 18:20
    #39634373
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Anatoly MoskovskyСкорее всего он и вообще не понял еще чего он хочет добиться.

Он хочет пойти против системы, которая автоматически удаляет объекты после использования.
А он хочет удалять всё собственными руками. Зачем - неизвестно, наверное шаблоны окаменели.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.04.2018, 18:26
    #39634375
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Dimitry SibiryakovОн хочет пойти против системы...


Просто отличное начало! :)
...
Рейтинг: 0 / 0
22.04.2018, 18:31
    #39634376
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Dimitry SibiryakovОн хочет пойти против системы, которая автоматически удаляет объекты после использования.
А он хочет удалять всё собственными руками. Зачем - неизвестно, наверное шаблоны окаменели.


Нет, я не хочу удалять руками. Система уже сама удаляет задачи, и я наоборот хочу предотвратить повтроное удаление задач.
...
Рейтинг: 0 / 0
22.04.2018, 18:34
    #39634378
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
[/quot AlekseySQL]
Система уже сама удаляет задачи, и я наоборот хочу предотвратить повтроное удаление задач.
[/quot]
Так в чём проблема-то? Передал задачу системе и забыл про неё. Система удалит её ровно
один раз, после выполнения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.04.2018, 19:58
    #39634389
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Dimitry SibiryakovТак в чём проблема-то? Передал задачу системе и забыл про неё. Система удалит её ровно
один раз, после выполнения.


+ надо отследить, что задача выполнилась и удалилась. Поэтому топик называется: "Есть готовые обертки для указателей с проверкой на существование объекта?"
...
Рейтинг: 0 / 0
22.04.2018, 20:37
    #39634393
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
AlekseySQL+ надо отследить, что задача выполнилась и удалилась.

Не надо: удалится она сама. Как задача отрапортует о своём выполнении - не имеет ничего
общего с сабжем и определяется по обстоятельствам. Насколько я знаю, в Qt принято посылать
сигналы, но никто не мешает поместить результат в очередь, записать в файл или отослать
почтовым голубем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.04.2018, 08:20
    #39634484
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Dimitry SibiryakovНе надо: удалится она сама. Как задача отрапортует о своём выполнении - не имеет ничего
общего с сабжем и определяется по обстоятельствам. Насколько я знаю, в Qt принято посылать
сигналы, но никто не мешает поместить результат в очередь, записать в файл или отослать
почтовым голубем.


Я хочу избежать кода в задачах, чтобы весь код распался на независимые подсистемы. Задачи должны не знать, что за ними следят :)
...
Рейтинг: 0 / 0
23.04.2018, 08:39
    #39634489
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Попробовал QThreadPool скормить задачу обернутую shared_ptr, а в очередь положить weak_ptr и получил ошибку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void Add(QRunnable* const Task_)
        {
            std::shared_ptr<QRunnable*> shared_ptr(Task_);
            std::weak_ptr<QRunnable*> weak_ptr(shared_ptr);

            MyDeque.push_back(weak_ptr);
            QThreadPool::globalInstance()->start(shared_ptr);//ТУТ ОШИБКА
        }



Код: plaintext
1.
ошибка: no matching function for call to ‘QThreadPool::start(std::shared_ptr<QRunnable*>&)’
             globalInstance->start(shared_ptr);

Другими словами, QThreadPool написан так, что ему нельзя скормить умный указатель, а только саму задачу. Походу и с другими обертками он поступит также. Значит остается только посылать сигналы из деструктора задачи (что мне не нравится, потому что превращает мою гениальную программу в код- лапшу).
...
Рейтинг: 0 / 0
23.04.2018, 09:08
    #39634503
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Появилась новая проблема :)

А что если QThreadPool перемещает задачи по памяти? Ведь я тогда не смогу идентифицировать задачу по совпадению указателя!
Вот какой шаблон запуска задачи:
Код: plaintext
void start(QRunnable *runnable, int priority = 0)

нет и намека на константность указателя!

Робя, а есть в языке какие- то объекты гарантирующие свою уникальность в работающей программе (реализация ключей)? Можно конечно, набрасать класс выдающий последовательно целые номера, но хочется работать со стандартными объектами, чтобы другим было легко читать мой чудо- код.
...
Рейтинг: 0 / 0
23.04.2018, 09:40
    #39634524
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
Sysguid. Но он длинный. Можно просто глобальную atomic переменную и брать из нее
последовательность.
...
Рейтинг: 0 / 0
23.04.2018, 09:51
    #39634532
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть готовые обертки для указателей с проверкой на существование объекта?
AlekseySQLесть в языке какие- то объекты гарантирующие свою уникальность в работающей программе (реализация ключей)?
Код: plaintext
1.
2.
3.
std::atomic<int> counter = {0};
...
int key = ++counter;
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Есть готовые обертки для указателей с проверкой на существование объекта? / 25 сообщений из 57, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]