我想知道如何与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线程和主线程之间共享静态全局变量?
答案 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信号和插槽即可:
通过slot
将pass_test
连接到您的signal
Qt::QueuedConnection
。
这样,在初始化指针时,只需发出信号以将其发送到主线程即可。主线程将收到您的指针来安全地对其进行处理。
有关QThread的更多信息,请显示this article。 有关Qt信号和插槽的更多信息,请显示this article。