Коллеги, я тут немного рефакторил легаси и увидел то, чего

не должен был увидеть. Теперь дилемма, форсить чтобы пофиксили, или не трогать, оставив TODO.
class FooObject : public QObject
{
Q_OBJECT
...
void doStuff()
{
m_thread = std::thread([this]() {
Q_EMIT signal1();
});
}

Q_SIGNALS:
void signal1();

std::thread m_thread;
};

class BarObject : public QObject
{
Q_OBJECT
...
public Q_SLOTS:
void slot1() { ... };
};

int main()
{
...
FooObject foo;
BarObject bar;

QObject::connect(&foo, &FooObject::signal1, &bar, &BarObject::slot1, Qt::QueuedConnection);
...
foo.moveToThread(someQThreadPtr);

...
foo.doStuff();
...
}
Скажите, легально ли так поступать, закрыв глаза на то, что используется std::thread и знание о том, что слот будет подписан через QueuedConnection?
Понятно, что с DirectConnection будет data race в слоте.
Просто я не совсем уверен, что доступ к event dispatcher'у FooObject'а является безопасным в этом случае.

Как фикс я бы предложил, во первых, заменить std::thread на QThread, а во вторых, эмитить сигнал через QMetaObject::invokeMethod(this, "signal1", Qt::QueuedConnection);

1 ответов

10 просмотров
𝕴𝖛𝖆𝖓- Автор вопроса

Ну камон, никому не хочется проиндексировать такой маленький код сниппет?

Похожие вопросы

Обсуждают сегодня

Так а кто может спарсить всех участников чата? Идишники
Magic
18
да пофиг на капчу зашел в чат и молчишь при этом ты нонейм? пошел вон
Magic
17
Как удалить health check в Consul? Казалось бы, это должно быть не сложно, но я не могу найти в документации ничего про это, только про добавление service с health check "в н...
Roman
2
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
13
Privet! Mozhet jesti ideji - nemogu sdelatj upload backup s filestore cerez WEB. Fail okolo 450mb, eto mozhet bitj prichinoi? Nemogu ponjatj..kak zagruzitj backup... Poluchaju...
Matiss 🤘 Black Oak IT 🌳 Batumi 🌴 Latvija
5
Нужно магазин с тильды на опен кат перенести Есть кто умеет? В лс
Magic
8
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
А кто знает в тейлоре до сих пор есть конфликты слагов или поправили уже?
Black Cat
5
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
Я хочу запустить свой проект в тг. Что-то между пирамидой и майнилкой. Еще подобного ничего не было. Уникальная идея. Нужен именно не бот, а приложение. С ввод, выводом тон...
Павел А.
6
Карта сайта