powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Есть готовые обертки для указателей с проверкой на существование объекта?
25 сообщений из 57, страница 2 из 3
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634573
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TAlekseySQLесть в языке какие- то объекты гарантирующие свою уникальность в работающей программе (реализация ключей)?
Код: plaintext
1.
2.
3.
std::atomic<int> counter = {0};
...
int key = ++counter;



Пасибки, создал класс- синглтон с атомарной переменной.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634594
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLДругими словами, QThreadPool написан так, что ему нельзя скормить умный указатель, а только саму задачу. Походу и с другими обертками он поступит также. Значит остается только посылать сигналы из деструктора задачи (что мне не нравится, потому что превращает мою гениальную программу в код- лапшу).
Сделайте обертку реализующую QRunnable внутри которой shared_ptr на ваш Task_
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634631
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЯ хочу это использовать в собственном барьере синхронизации: с помощью этого механизма я пойму, что задача, унаследованная от QRunnable, выполнена и удалена. В Qt есть такое неудобство: QThreadPool позволяет дождаться заврешения всех задач, не разделяя их по подсистемам (поскольку работа идет через статический объект QGlobalInstance). А я хочу создать возможность для каждой подсистемы анализировать выполненность только своих задач.Так не используйте globalInstance(), создайте свой пул для каждой подсистемы
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634641
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЯ хочу избежать кода в задачах, чтобы весь код распался на независимые подсистемы. Задачи
должны не знать, что за ними следят :)

Так за ними и не надо следить. Но даже независимые подсистемы как-то должны общаться между
собой.

Планировщик задач не должен за ними следить, его работа сформировать задачу и отдать её на
выполнение. Задаче при выполнении достаточно закинуть свой результат в известную ей
очередь "выполненных заданий". Кто эту очередь будет вычитывать - не её дело. Диспетчер
результатов не должен следить за задачами, его дело тупо сидеть сидеть и ждать сообщений
из очереди выполненных задач. Именно так я понимаю "независимые подсистемы". У тебя же они
как-то слишком запутываются в тугой узел "слежения".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634665
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyСделайте обертку реализующую QRunnable внутри которой shared_ptr на ваш Task_

Спасибо! Что- то я про такое решение и не подумал! Думаю это лучший вариант.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634712
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlekseySQLСпасибо! Что- то я про такое решение и не подумал! Думаю это лучший вариант.

А есть последствия, что я при определении полей объекта создаю shared_ptr по this, хотя объект недосконструирован?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class MyTask: public QRunnable
    {
        const std::shared_ptr<MyTask> ThisTask;
       
        std::shared_ptr<MyTask> GetThisTask()
        {
            std::shared_ptr<MyTask> s_ptr(this);
            return s_ptr;
        }

    public:
        MyTask()
            :
            ThisTask(GetThisTask())
        {}
};
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634729
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLА есть последствия, что я при определении полей объекта создаю shared_ptr по this, хотя объект недосконструирован?
Так делать нельзя. Да и я вообще не это имел в виду.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class TaskWrapper: public QRunnable
{
  public:
  TaskWrapper(QRunnable* task)
  : m_task_ptr(task)
  {}

  std::weak_ptr<QRunnable> get_weak_ptr()
  {
      return m_task_ptr;
  }
  
  private:
   std::shared_ptr<QRunnable> m_task_ptr;
};


....

QRunnable* task = new TaskWrapper(new MyTask(...));
std::weak_ptr<QRunnable> weak_ptr = task->get_weak_ptr();
QThreadPool::globalInstance()->start(task)
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634733
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и естественно добавить в TaskWrapper методы которые QRunnable долже реализовывать и в них вызывать те же методы у m_task_ptr
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634761
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyНу и естественно добавить в TaskWrapper методы которые QRunnable долже реализовывать и в них вызывать те же методы у m_task_ptr

Не понял зачем это надо: ведь наследование у нас публичное и все методы QRunnable и так доступны...
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634773
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QThreadPool ничего не знает про shared_ptr, и единственный способ это обойти - передать ему указатель не на вашу задачу, а на другой вспомогательный объект, в котором уже лежит shared_ptr на вашу задачу...
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634776
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНе понял зачем это надо: ведь наследование у нас публичное и все методы QRunnable и так доступны...
ЧТобы как минимум вызвать метод который совственно стартует поток.
В обертке кода потока нет. Она должна перенаправить его на вложенный объект.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634780
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BTW, в QRunnable есть пара методов:
bool autoDelete() const
void setAutoDelete(bool autoDelete)
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634788
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyЧТобы как минимум вызвать метод который совственно стартует поток.
В обертке кода потока нет. Она должна перенаправить его на вложенный объект.

Надо метод run() реализовать и все: наследование от QRunnable уже делает этот поток задачей. В методе run() как раз и описывается что должна делать задача, а библиотечный объект QRunnable не позволяет у себя создать метод run().

Так что думаю никаких методов никуда перенаправлять не надо.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634790
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneBTW, в QRunnable есть пара методов:
bool autoDelete() const
void setAutoDelete(bool autoDelete)

Спасибо, не замечал этой возможности!
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634793
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут МастерЗив отжег по теме :)

Думаю после этого тема исчерпана.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634798
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЕсть умные указатели, которые при выходе из области видимости удаляют объект. Но мне не надо удалять объект, а всего- навсего передать объект в другую подсистему и периодически анализировать удалили там его или пока нет. Другими словами, нужна обертка, у которой перегружены все операторы указателя + метод empty(), чтобы проверить валидность объекта.

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

weak_ptr ?
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634822
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL Тут МастерЗив отжег по теме :)

Думаю после этого тема исчерпана.А зачем вам shared_ptr на this? Если вы передадите этот объект в QThreadPool::start, при завершении задачи объект будет удален, и вы останетесь со сломанным shared_ptr с ненулевым счетчиком и невалидным указателем.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634833
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLBarloneBTW, в QRunnable есть пара методов:
bool autoDelete() const
void setAutoDelete(bool autoDelete)

Спасибо, не замечал этой возможности!Но есть один нюанс: если сделаете setAutoDelete(false), получите другой квест - как узнать, что задача уже завершилась и ее можно удалять.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634847
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneНо есть один нюанс: если сделаете setAutoDelete(false), получите другой квест - как
узнать, что задача уже завершилась и ее можно удалять.

Это сложно. Вставить "delete this" в правильное место способен не каждый, тут программист
нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634850
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovBarloneНо есть один нюанс: если сделаете setAutoDelete(false), получите другой квест - как
узнать, что задача уже завершилась и ее можно удалять.

Это сложно. Вставить "delete this" в правильное место способен не каждый, тут программист
нужен.
Так если по мнению автора, из деструктора сигналы посылать некошерно, хотя это можно сделать в одном месте и отнаследоваться, то что уж говорить про вставку какого-то дополнительного кода в каждый метод run каждого наследника (а я подозреваю, что их больше одного, что - то там про подсистемы было...)
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634852
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barloneчто - то там про подсистемы было...

Аффтар просто переусложняет задачу. Насколько я помню, у него просто есть большой массив
данных, которые он хочет параллельно обсчитать. Но вместо обычного пути использования
start-join стандартных потоков он выбрал путь самурая, ведущий к смерти.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39634920
teo609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlekseySQLЕсть умные указатели, которые при выходе из области видимости удаляют объект. Но мне не надо удалять объект, а всего- навсего передать объект в другую подсистему и периодически анализировать удалили там его или пока нет.

Чем не подходит сохранить у себя еще один shared_ptr и смотреть его счетчик использования?

Здесь еще, возможно, надо смотреть на то, чтобы объект удалялся в том же exe/dll модуле, где был создан.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39635004
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще через сто сообщений мы плавно подойдем к GC.
...
Рейтинг: 0 / 0
Есть готовые обертки для указателей с проверкой на существование объекта?
    #39635112
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЕще через сто сообщений мы плавно подойдем к GC.

Garbage Collector & C++

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

Желание разделить программу на подсистемы - правильное.
Делать спагетти из перекрёстных ссылок - неправильный способ его достижения.

При разделении на подсистемы, их следует максимально инкапсулировать, оставляя торчать
наружу только определённый интерфейс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Есть готовые обертки для указателей с проверкой на существование объекта?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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