一種基于Z-Buffer 的銑削實(shí)體加工仿真算法,華中數(shù)控HNC-32 數(shù)控系統(tǒng)HMI 的仿真系統(tǒng)繼承自該代碼,其主要結(jié)構(gòu)如下:

可見,顯示緩存等核心數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)為全局變量,但HNC-32 的設(shè)計(jì)目標(biāo)是多通道數(shù)控系統(tǒng),每個(gè)通道都需要一個(gè)實(shí)體加工仿真組件的實(shí)例,由于全局緩存數(shù)據(jù)為所有實(shí)例共享,因此出現(xiàn)的所有通道顯示內(nèi)容將完全一致,無法實(shí)現(xiàn)多通道仿真。為簡(jiǎn)化改造工作,將原系統(tǒng)中約50 多個(gè)全局變量合并為一個(gè)結(jié)構(gòu),并將原全局變量作為其成員,即一個(gè)大的結(jié)構(gòu)變量包括了50 個(gè)原全局變量。
按照 TLS 要求該結(jié)構(gòu)變量必須動(dòng)態(tài)創(chuàng)建,如下代碼表明了它的聲明、創(chuàng)建過程,代碼還表明每個(gè)ActiveX 組件構(gòu)造時(shí)即調(diào)用API 函數(shù)TlsAlloc 獲得一個(gè)線程索引,在局部堆申請(qǐng)到存儲(chǔ)空間后用API 函數(shù)TlsSetValue 將該存儲(chǔ)區(qū)地址與線程索引對(duì)應(yīng)。


在其他函數(shù)中,可以通過線程索dwTlsIndex 調(diào)用API函數(shù)TlsGetValue 引訪問到上述大結(jié)構(gòu)變量,進(jìn)而訪問到原全局變量,代碼如下:
//被OpenPatg->hFile 調(diào)用讀刀位文件并顯示刀位軌跡
int CSimuCtrlBCtrl : ShowPath(FILE *fp){
GlobalValues *g=(GlobalValues *)TlsGetValue(dwTlsIndex);
g->CtrlObj->GetClientRect(&rt);...
用戶評(píng)論
共 0 條評(píng)論