qt线程是否共享静态全局变量?

时间:2019-05-29 12:35:37

标签: c++ multithreading qt qt5 mutex

我想知道如何与qt-thread共享静态全局变量。

我有一个静态全局指针 test_mem ,该指针在qt-thread和主线程之间共享。qt-thread将此指针变量初始化为我必须要指向的数据存储位置的起始地址read.then主线程将使用相同的全局变量从该指针指向的内存位置读取数据。但是似乎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线程和主线程之间共享静态全局变量?

1 个答案:

答案 0 :(得分:0)

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信号和插槽即可:

通过slotpass_test连接到您的signal Qt::QueuedConnection。 这样,在初始化指针时,只需发出信号以将其发送到主线程即可。主线程将收到您的指针来安全地对其进行处理。

有关QThread的更多信息,请显示this article。 有关Qt信号和插槽的更多信息,请显示this article