更新時(shí)間:2018-01-05 來(lái)源:黑馬程序員 瀏覽量:
I. 研究來(lái)由
在屏幕共享項(xiàng)目里需要用到共享內(nèi)存,但是之前對(duì)QSharedMemory實(shí)在不熟悉,因此在Mac上使用了mmap,而windows系統(tǒng)使用了CreateFileMapping。既然QT提供了跨平臺(tái)共享內(nèi)存機(jī)制,那么還是研究研究吧。
II. 注意事項(xiàng)
QSharedMemory雖然是跨平臺(tái)的進(jìn)程間內(nèi)存共享方案,但是在不同的平臺(tái)也是有不同的行為的,主要的區(qū)別是:
· windows平臺(tái)下,所有的進(jìn)程退出后,即使進(jìn)程crash,共享內(nèi)存對(duì)象也會(huì)被內(nèi)核銷(xiāo)毀。
· unix平臺(tái)下,如果有進(jìn)程crash,導(dǎo)致沒(méi)有調(diào)用到QSharedMemory的析構(gòu)函數(shù)的話(huà),共享內(nèi)存對(duì)象不會(huì)被內(nèi)核銷(xiāo)毀。
以上兩句是看QT文檔所得,英文水平有限,不一定正確,請(qǐng)驗(yàn)證
setNativeKey這種函數(shù),會(huì)導(dǎo)致lock失敗,這意味著QT的共享機(jī)制被破壞了,所以還是不用了吧。
III. 演示代碼
本文版權(quán)歸黑馬程序員C/C++學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:黑馬程序員C/C++培訓(xùn)學(xué)院
首發(fā):http://c.itheima.com/