Разделяет ли qt-поток статическую глобальную переменную или нет? - PullRequest
0 голосов
/ 29 мая 2019

Я хочу узнать о том, как поделиться статической глобальной переменной с qt-thread.

У меня есть один статический глобальный указатель test_mem , который используется совместно с qt-thread и main thread.qt-thread с инициализацией этой переменной-указателя по начальному адресу ячейки памяти данных, которую я должен прочитать Затем основной поток будет использовать ту же глобальную переменную для чтения данных из области памяти, на которую указывает этот указатель. Но похоже, что qt-thread не делит глобальный указатель с основным потоком.

void run() {
    test_mem = (unsignedchar*)mmap(NULL,lenth,PROT_WRITE|PROT_READ,MAP_SHARED,trigger_fd,offset);
    emit pass_test(&test_mem);       
}

Я хочу знать, можем ли мы совместно использовать статическую глобальную переменную между qt-thread и main thread?

1 Ответ

0 голосов
/ 29 мая 2019

Qt и C ++ в общем имеют общие переменные static.

пример использования:


//Class where data is stored:

class SharedData {
    static QMutex sMutex;
    static unsigned char* spDataPointer;
    signals: void pass_test(unsigned char** address);
}

//Access from from thread:

SharedData::spDataPointer = (unsignedchar*) mmap(NULL, lenth, PROT_WRITE|PROT_READ, MAP_SHARED, trigger_fd, offset);
emit SharedData::pass_test(&SharedData::spDataPointer); 

Но есть и другой подход к вашей реализации.

Вам не нужно использовать совместно используемую переменную, просто используйте сигналы и слоты Qt:

Подключите slot к вашему pass_test signal по Qt::QueuedConnection. Таким образом, когда вы инициализируете указатель, просто подайте сигнал, чтобы отправить его в основной поток. Главный поток получит ваш указатель обработать его безопасно.

Для получения дополнительной информации о QThread show эта статья . Для получения дополнительной информации о Qt Signals и Slots покажите эту статью .

...