Почему QThreadData :: current использует переменную stati c? - PullRequest
0 голосов
/ 29 марта 2020

При чтении исходного кода Qt я испытываю замешательство по поводу следующего кода :

// No threads: so we can just use static variables
static QThreadData *data = 0;

QThreadData *QThreadData::current(bool createIfNecessary)
{
    if (!data && createIfNecessary) {
        data = new QThreadData;
        data->thread = new QAdoptedThread(data);
        data->threadId.store(Qt::HANDLE(data->thread));
        data->deref();
        data->isAdopted = true;
        if (!QCoreApplicationPrivate::theMainThread)
            QCoreApplicationPrivate::theMainThread = data->thread.load();
    }
    return data;
}

и его использования в QObject :: moveToThread

QThreadData *currentData = QThreadData::current();
QThreadData *targetData = targetThread ? QThreadData::get2(targetThread) : nullptr;
if (d->threadData->thread == 0 && currentData == targetData) {
    // one exception to the rule: we allow moving objects with no thread affinity to the current thread
   currentData = d->threadData;
}

Я думаю, QThreadData::current() должен возвращать разные значения при вызове из другого потока, но как этого можно добиться в факте использования статических / глобальных данных?

1 Ответ

1 голос
/ 29 марта 2020

Вы смотрите не в том месте - вы находитесь в другой ветке #if QT_CONFIG(thread)

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