отправляющий сигнал с переменной size_t из потока не получен в слоте другого потока - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть эти 2 сигнала:

void dataSampled(size_t a);
void error(const QString& message);

В другом месте:

    m_acquisitionThread = new QThread(this);
    m_acquisitionManager = new AcquisitionManager();
    QObject::connect(m_acquisitionManager, &AcquisitionManager::dataSampled,
                     this,                 &Application::onDataSampled); // this Application pointer
    QObject::connect(m_acquisitionManager, &AcquisitionManager::error,
                     this,                 &Application::showError); // this Application pointer
    m_acquisitionManager->moveToThread(m_acquisitionThread);
    m_acquisitionThread->start();

AcquisitionManager - это объект, перемещенный в поток, приложение живет в "основном" потоке.

Когда я посылаю сигналы в Application, слот, подключенный к dataSampled, который требует size_t, не выполняется, изменяя size_t на int (только сигнал, слот может оставаться size_t) или даже удаляя его, устраняет проблему. Это действительно странно, у кого-нибудь есть идея, почему сигнал не посылается? В другом приложении (но однопоточном) я проверил, что size_t отправляются из сигнала в слот без проблем (но опять-таки контекст отличается).

void AcquisitionManager::executeDataAcquisition()
{
    emit dataSampled(666); // onDataSampled is never executed (only if I change signal type from size_t to an int or something else)
    emit error("foobar"); // Application::showError is always executed !

1 Ответ

0 голосов
/ 08 ноября 2019

регистрация size_t устранила проблему:

 qRegisterMetaType<size_t>("size_t");

Но не является ли size_t примитивным типом типа int?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...