进程共享变量#pragma data_seg用法
| ???????? 用#pragma data_seg建立一個新的數(shù)據(jù)段并定義共享數(shù)據(jù),其具體格式為:? 1,#pragma data_seg()一般用于DLL中。也就是說,在DLL中定義一個共享的,有名字的數(shù)據(jù)段。最關(guān)鍵的是:這個數(shù)據(jù)段中的全局變量可以被多個進(jìn)程共享。否則多個進(jìn)程之間無法共享DLL中的全局變量。 ---------------------------------------------------------------------------------------------------- 應(yīng)用程序的入口文件前面加上 #pragma data_seg("flag_data") 然后程序啟動的地方加上 if(app_count>0)???? // 如果計(jì)數(shù)大于0,則退出應(yīng)用程序。 Windows 在一個Win32程序的地址空間周圍筑了一道墻。通常,一個程序的地址空間中的數(shù)據(jù)是私有的,對別的程序而言是不可見的。但是執(zhí)行STRPROG的多個執(zhí)行實(shí)體表示了STRLIB在程序的所有執(zhí)行實(shí)體之間共享數(shù)據(jù)是毫無問題的。當(dāng)您在一個STRPROG窗口中增加或者刪除一個字符串時,這種改變將立即反映在其它的窗口中。 在全部例程之間,STRLIB共享兩個變量:一個字符數(shù)組和一個整數(shù)(記錄已儲存的有效字符串的個數(shù))。STRLIB將這兩個變量儲存在共享的一個特殊內(nèi)存區(qū)段中: #pragma????? data_seg ("shared")???????? int???????????????? iTotal = 0 ;???????? WCHAR?????????????? szStrings [MAX_STRINGS][MAX_LENGTH + 1] = { '/0' } ;???????? #pragma????? data_seg ()????????第一個#pragma敘述建立數(shù)據(jù)段,這里命名為shared。您可以將這段命名為任何一個您喜歡的名字。在這里的#pragma敘述之后的所有初始化了的變量都放在shared數(shù)據(jù)段中。第二個#pragma敘述標(biāo)示段的結(jié)束。對變量進(jìn)行專門的初始化是很重要的,否則編譯器將把它們放在普通的未初始化數(shù)據(jù)段中而不是放在shared中。 連結(jié)器必須知道有一個「shared」共享數(shù)據(jù)段。在「Project Settings」對話框選擇「Link」頁面卷標(biāo)。選中「STRLIB」時在「Project Options」字段(在Release和Debug設(shè)定中均可),包含下面的連結(jié)敘述: /SECTION:shared,RWS????????字母RWS表示段具有讀、寫和共享屬性。或者,您也可以直接用DLL原始碼指定連結(jié)選項(xiàng),就像我們在STRLIB.C那樣: #pragma comment(linker,"/SECTION:shared,RWS")????????共享的內(nèi)存段允許iTotal變量和szStrings字符串?dāng)?shù)組在STRLIB的所有例程之間共享。因?yàn)镸AX_STRINGS等于256,而 MAX_LENGTH等于63,所以,共享內(nèi)存段的長度為32,772字節(jié)-iTotal變量需要4字節(jié),256個指針中的每一個都需要128字節(jié)。 |
?
轉(zhuǎn)載于:https://www.cnblogs.com/oneway1990/p/7787370.html
總結(jié)
以上是生活随笔為你收集整理的进程共享变量#pragma data_seg用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: StringUtil.isNotEmpt
- 下一篇: 单元测试的一些基本概念