Qt共享記憶體QSharedMemory
在Qt中可以利用QSharedMemory類輕鬆實現共享記憶體,這裡舉一個例子:
一個程式讀取一張圖片並寫入共享記憶體段,另一個程式從共享記憶體段讀取並顯示出來
寫共享記憶體段程式碼,用new形式:
//在建構函式中寫
sharedMemeory = new QSharedMemory(this);
sharedMemeory->setKey("testtest");
//在某個按鈕的點選槽處寫
if(sharedMemeory->isAttached()){
if(sharedMemeory->detach())
qDebug()<<"detach...";
}
QPixmap map("C:/Users/admin/Desktop/me.jpg");
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream stream(&buffer);
stream<<map;
//建立共享記憶體段
int size=buffer.size();
if(!sharedMemeory->create(size)){
qDebug()<<sharedMemeory->errorString();
return;
}
sharedMemeory->lock();
void* to =sharedMemeory->data();
void*from = (void*)buffer.data().data();
memcpy(to,from,buffer.size());
sharedMemeory->unlock();
qDebug()<<"load succ";
讀共享記憶體段,用臨時變數即可
QSharedMemory sharedMemeory;
sharedMemeory.setKey("testtest");
//共享記憶體段存在則繫結成功
if(!sharedMemeory.attach()){
qDebug()<<"attach error:"<<sharedMemeory.errorString();
return;
}
QBuffer buffer;
QDataStream stream(&buffer);
sharedMemeory.lock();
buffer.setData((char*)sharedMemeory.data(),sharedMemeory.size());
sharedMemeory.unlock();
buffer.open(QBuffer::ReadOnly);
QPixmap pix;
stream>>pix;
ui->label->setPixmap(pix);
總結:
兩個程式都要設定相同的key
一個程式sharedMemory.create【建立共享記憶體段】
則一個程式sharedMemory.attach【關聯共享記憶體段】就可以進行讀寫了。
當最後一個連線共享記憶體的程式執行detach後,共享記憶體段將會被釋放,若返回false通常意味著該段要麼沒有被附加,要麼被另一個程式鎖定。
相關文章
- QT之共享記憶體QT記憶體
- [QT]QSharedMemory讀寫cv::MatQT
- Golang 共享記憶體Golang記憶體
- POSIX 共享記憶體記憶體
- [Linux]共享記憶體Linux記憶體
- Linux共享記憶體(二)Linux記憶體
- nginx共享記憶體分析Nginx記憶體
- Linux共享記憶體的管理Linux記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- Android匿名共享記憶體(Ashmem)原理Android記憶體
- nginx中共享記憶體的使用Nginx記憶體
- OpenResty 和 Nginx 的共享記憶體區是如何消耗實體記憶體的RESTNginx記憶體
- Kubernetes中Pod間共享記憶體方案記憶體
- 程序間通訊(3)-共享記憶體記憶體
- 程式間通訊之共享記憶體記憶體
- Linux:深入淺出 Linux 共享記憶體Linux記憶體
- Golang併發之共享記憶體變數Golang記憶體變數
- system-v IPC共享記憶體通訊記憶體
- Linux程式間通訊之共享記憶體Linux記憶體
- [20190104]ipcs檢視共享記憶體段.txt記憶體
- PostgreSQL共享記憶體裡的內容(initCommunication)SQL記憶體
- linux mmap應用與驅動共享記憶體Linux記憶體
- C++ 共享記憶體ShellCode跨程式傳輸C++記憶體
- PHP 的自帶記憶體共享 APCu 和 shmPHP記憶體
- 資料庫實現原理#6(共享記憶體)資料庫記憶體
- Win10系統GPU共享記憶體怎麼關閉?Win10系統GPU共享記憶體的關閉方法Win10GPU記憶體
- 有管理共享記憶體設計方法的具體實現記憶體
- Linux 程式間通訊之System V 共享記憶體Linux記憶體
- Linux系統程式設計—共享記憶體之mmapLinux程式設計記憶體
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- [20191220]關於共享記憶體段相關問題.txt記憶體
- Linux 程式設計1:深入淺出 Linux 共享記憶體Linux程式設計記憶體
- [20210412]分析會話佔用的共享記憶體段.txt會話記憶體
- 共享記憶體對映(linux程式與執行緒學習筆記)記憶體Linux執行緒筆記
- 記憶體管理 記憶體管理概述記憶體
- 【記憶體管理】記憶體佈局記憶體
- 給PHP開啟shmop擴充套件實現共享記憶體PHP套件記憶體
- JNI 基礎 - Android 共享記憶體的序列化過程Android記憶體