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

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


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





















用戶評論
共 0 條評論