Size: a a a

2020 February 17

SE

Suigintou45 E13 in Qt
Vladimir Suisei
Что значит не задавать?
в конструкторе parent не задавать
источник

AS

Anatoly Shirokov in Qt
Vladimir Suisei
Что значит не задавать?
QObject* child = new QObject();
источник

有長

有希 長門 in Qt
Vladimir Suisei
void QObject::moveToThread(QThread *targetThread)

Changes the thread affinity for this object and its children. The object cannot be moved if it has a parent. Event processing will continue in the targetThread.

Верно ли я понимаю, что если есть класс Parent и наследуемый от него класс Child, то попытавшись применить moveToThread на объект класса Child я пососу бибу? (он останется в старом треде)
В документации имеется в виду parent как QObject::setParent, а не наследуемость классов. В английском базовые классы называются Base, это только в русской литературе привычка называть их 'родительскими классами'
источник

有長

有希 長門 in Qt
Так что вызывай на нём moveToThread свободно, главное, чтобы метод QObject::parent() этого объекта возвращал nullptr.
источник

VS

Vladimir Suisei in Qt
Окей, спасибо.
источник

SE

Suigintou45 E13 in Qt
а вот кстате parent в конструкторе QThread - безопасно его задавать?)
источник

m

mefest in Qt
Suigintou45 E13
а вот кстате parent в конструкторе QThread - безопасно его задавать?)
QThread живёт в том же потоке где ты его создаёшь.
источник

SE

Suigintou45 E13 in Qt
Note that deleting a QThread object will not stop the execution of the thread it manages. Deleting a running QThread (i.e. isFinished() returns false) will result in a program crash.
источник

SE

Suigintou45 E13 in Qt
просто если создавший объект начнёт удаляться раньше объекта в другом треде...
источник

m

mefest in Qt
Но вроде удаление этого объекта вызовет ковш если поток не завершен
источник

m

mefest in Qt
Suigintou45 E13
просто если создавший объект начнёт удаляться раньше объекта в другом треде...
Если ты установил parent для qthread то должен следить что поток завершится до удаления parenta
источник

m

mefest in Qt
Suigintou45 E13
Note that deleting a QThread object will not stop the execution of the thread it manages. Deleting a running QThread (i.e. isFinished() returns false) will result in a program crash.
Это по итогу никак не влияет. У тебя и без parent будет краш если ты удалишь qthread раньше чем поток завершится.
источник

SE

Suigintou45 E13 in Qt
mefest
Это по итогу никак не влияет. У тебя и без parent будет краш если ты удалишь qthread раньше чем поток завершится.
обычно делаю коннект Worker::finished -> QThread::quit, QThread::finished -> QThread::deleteLater. просто хотелось ленивого способа, чтобы удалил тред автоматом и всё подчистилось)
источник
2020 February 18

ee

elias eliatto in Qt
Привет! Требуется использовать RTEMS для SOC. Тогда надо использовать Qt for MCU?
источник

ee

elias eliatto in Qt
Нужно лишь Qt Core
источник

g

git_gud in Qt
Такой код гарантирует удаление объекта?
QObject* item = new QObject();
...
item->deleteLater();
item = nullptr;

Тобишь можно ли обнулять указатель на QObject сразу после вызова deleteLater()?
источник

IZ

Ilia Zviagin in Qt
git_gud
Такой код гарантирует удаление объекта?
QObject* item = new QObject();
...
item->deleteLater();
item = nullptr;

Тобишь можно ли обнулять указатель на QObject сразу после вызова deleteLater()?
Да, но только если ты находишься в треде, который обрабатывает события (Event)
источник

IZ

Ilia Zviagin in Qt
git_gud
Такой код гарантирует удаление объекта?
QObject* item = new QObject();
...
item->deleteLater();
item = nullptr;

Тобишь можно ли обнулять указатель на QObject сразу после вызова deleteLater()?
можно ли обнулять указатель на QObject сразу после вызова deleteLater() -- одно с другим никак не связано.
Ты можешь его обнулять, чтобы больше туда к нему не ходить, ты можешь НЕ обнулять, и даже туда , к этому объекту, пока обращаться. До окончания обработки данного Event объект останется валидным.
источник

IZ

Ilia Zviagin in Qt
elias eliatto
Привет! Требуется использовать RTEMS для SOC. Тогда надо использовать Qt for MCU?
Ты столько buzz words понаписал, что ах в ушах жужжит...
источник

g

git_gud in Qt
Ilia Zviagin
можно ли обнулять указатель на QObject сразу после вызова deleteLater() -- одно с другим никак не связано.
Ты можешь его обнулять, чтобы больше туда к нему не ходить, ты можешь НЕ обнулять, и даже туда , к этому объекту, пока обращаться. До окончания обработки данного Event объект останется валидным.
Понял, спасибо
источник