<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于線(xiàn)程局部存儲技術(shù)的多通道數控系統仿真

基于線(xiàn)程局部存儲技術(shù)的多通道數控系統仿真

作者: 時(shí)間:2012-11-12 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:在多實(shí)例多情況下,ActiveX 組件的不同實(shí)例共享同一全局數據緩沖區,在改造集成面向過(guò)程開(kāi)發(fā)的傳統代碼時(shí)必須修改代碼以消除全部全局變量。針對該情況,使用實(shí)現全局變量的化,采用具有大量全局變量的實(shí)體代碼實(shí)現ActiveX封裝。該已成功應用于工業(yè)以太網(wǎng)的多中。

本文引用地址:http://dyxdggzs.com/article/148257.htm

關(guān)鍵詞:;;組件對象模型;ActiveX 組件

1 概述

組件對象模型(CompONent Object Model, COM)是由美國微軟公司提出的一種二進(jìn)制代碼互操作規范,ActiveX 是實(shí)現了一些特定接口(例如IDispatch)的標準COM 組件。

COM/ActiveX 規范已成為軟件業(yè)內最重要的工業(yè)標準之一。

組件的軟件構架方法通過(guò)重用已有的軟件組件,可使軟件開(kāi)發(fā)者像搭積木一樣快速構造應用軟件,從而提高生產(chǎn)效率,使軟件設計更加規范可靠。目前組件的軟件開(kāi)發(fā)方法已經(jīng)在業(yè)界得到廣泛應用。在中也使用組件實(shí)現加工,但現有文獻較少涉及多個(gè)ActiveX 組件實(shí)例的情況。ActiveX 組件采用類(lèi)似Windows消息運行機制的單套間模型(Single Threaded Apartment, STA)來(lái)串行化對組件屬性和方法的調用,即對ActiveX 組件的所有調用由COM 系統負責線(xiàn)程的同步。因此,該組件的調用是線(xiàn)程安全的。

COM 在STA 套間內的線(xiàn)程中創(chuàng )建一個(gè)隱藏窗口,將套間外的線(xiàn)程對這個(gè)對象的調用都轉變成對隱藏窗口發(fā)送消息,并由隱藏窗口的消息處理函數來(lái)實(shí)際調用組件對象,從而實(shí)現STA 套間模型。

一個(gè)進(jìn)程中的所有線(xiàn)程均處于同一虛擬地址空間,每個(gè)函數的局部變量在運行該函數的每個(gè)線(xiàn)程中都是唯一的,但靜態(tài)和全局變量則被所有線(xiàn)程所共享。即在多個(gè)ActiveX 組件實(shí)例的情況下,ActiveX 組件的 STA 模型不能保證全局數據成員是線(xiàn)程安全的。

2 線(xiàn)程局部原理

線(xiàn)程局部存儲(Thread Local Storage, TLS)是Win32 系統提供的一種簡(jiǎn)化多線(xiàn)程程序設計的底層基礎技術(shù),其實(shí)質(zhì)是介入全局數據創(chuàng )建過(guò)程,建立并管理全局數據與線(xiàn)程的關(guān)聯(lián),使得全局數據為其關(guān)聯(lián)線(xiàn)程所私有。TLS 原理如圖1 所示。

TLS 原理

每個(gè)進(jìn)程擁有一組TLS 槽口(Slot),每個(gè)槽口用序號標識,Windows 2000 有1 088 個(gè)這樣的槽口。線(xiàn)程通過(guò)API 函數可以分配TLS 槽口,在TLS 槽口存取數據,進(jìn)程中使用同一個(gè)序號的不同線(xiàn)程可指向獨立的局部堆內存中進(jìn)行數據存儲,即線(xiàn)程ID 和槽口號確定了一個(gè)二維空間映射,線(xiàn)程通過(guò)API 函數獲得線(xiàn)程間相互獨立的數據存儲地址。

圖 1 也表明了采用TLS 機制的具有2 個(gè)ActiveX 組件實(shí)例的運行時(shí)軟件內存結構,進(jìn)程分配了2 個(gè)TLS 索引值gdwTlsIndex1 和 gdwTlsIndex2,這2 個(gè)索引值代表了TLS槽口的序號,但不同線(xiàn)程按照相同的序號卻得到2 個(gè)獨立的局部堆地址,而這些數據在線(xiàn)程內卻具有全局數據的可訪(fǎng)問(wèn)性,即每個(gè)線(xiàn)程有單獨的全局數據拷貝,該數據對線(xiàn)程內的函數具有全局作用域。

Win32 系統中與TLS 有關(guān)的API 及用法如下:

(1)進(jìn)程初始化時(shí)分配TLS 槽口:

DWORD gdwTlsIndex;gdwTlsIndex = TlsAlloc();

(2)調用TlsSetValue 保存數據:

LPVOID lpvBuffer;lpvBuffer = (LPVOID) LocalAlloc(LPTR, 256);

TlsSetValue(gdwTlsIndex, lpvBuffer); //保存存儲區指針

(3)調用TlsGetValue 取數據:

LPVOID lpvData;lpvData = TlsGetValue(gdwTlsIndex); //取TLS 槽口中保存的存//儲區指針

(4)調用TlsFree 釋放槽口:

lpvBuffer = TlsGetValue(gdwTlsIndex);

LocalFree((HLOCAL) lpvBuffer); //釋放存儲區

TlsFree(gdwTlsIndex); //釋放TLS 槽口



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>