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

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


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