HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A processzor tulajdonságait lekérdező komponens készítése


Példaprogram letöltése

4848 bájt

Ebben a cikkben egy olyan komponenst készítünk, mely megvizsgálja egy függvény segítségével, hogy processzorunk milyen utasításkészleteket támogat (például 3DNOW!, vagy MMX), illetve egyéb lebegőpontos számítási műveletekre vonatkozó tulajdonságát is megtudhatjuk. A mellékelt példaprogram segítségével a komponensünk által visszaadott értékeket meg is jelenítjük.

A mellékelt példaprogram megnyitása előtt a ProcessorFeature.pas-ban levő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A processzor tulajdonságainak lekérdezéséhez az IsProcessorFeaturePresent nevű függvény fogjuk felhasználni.
Felépítése a következő:
IsProcessorFeaturePresent
BOOL IsProcessorFeaturePresent(
DWORD ProcessorFeature
);
Paraméterek
DWORD ProcessorFeature
Annak a paraméternek az értéke, melyet vizsgálni szeretnénk. Ez a következő lehet:
Érték Paraméter Jelentés
0 PF_FLOATING_POINT_PRECISION_ERRATA Pentium processzor esetén előfordulhat, hogy bizonyos körülmények között lebegőpontos műveletek végzésekor precíziós hiba lép fel.
1 PF_FLOATING_POINT_EMULATED Azt vizsgálja, hogy a lebegőpontos műveletek szoftveresen vannak-e emulálva. Egy nem-null értékkel tér vissza, amennyiben igen, ellenkező esetben nullát ad.
Windows NT 4.0 esetén ez fordítva igaz. Ez a hiba a későbbi verziókban javításra került.
2 PF_COMPARE_EXCHANGE_DOUBLE A processzor támogatja-e a double típusú adatok összehasonlító és csere műveletét (Pentium, MIPS, és Alpha processzorok esetén).
3 PF_MMX_INSTRUCTIONS_AVAILABLE Az MMX utasításkészlet támogatott-e.
6 PF_XMMI_INSTRUCTIONS_AVAILABLE Az SSE (Streaming SIMD Extension), azaz a lebegőpontos SIMD utasításkészlet elérhető-e.
7 PF_3DNOW_INSTRUCTIONS_AVAILABLE A 3D Now utasításkészlet támogatott-e.
8 PF_RDTSC_INSTRUCTION_AVAILABLE Az RDTSC (Read Time Stamp Counter) utasítás elérhető-e.
9 PF_PAE_ENABLED A processzor PAE (Physical Address Extension) engedélyezett-e, azaz támogatja-e a 4GB-nál nagyobb fizikai memória megcímzését az alkalmazások számára (Intel processzorok esetén).
10 PF_XMMI64_INSTRUCTIONS_AVAILABLE Az SSE2 (Streaming SIMD Extension2), azaz a lebegőpontos SIMD 2 utasításkészlet elérhető-e.
)
Visszatérési érték
Amennyiben a tulajdonság támogatott, a visszatérési érték egy nem-null érték lesz.
Ellenkező esetben nullát kapunk eredményként.
Maga a függvény boolean típusú eredményt szolgáltat.
Megjegyzés
A fenti paraméterek használatát nem mindegyik processzor, illetve operációs rendszer támogatja.
A forráskódban a komponens létrehozásakor elvégezzük a fent ismertetett paraméterekre a vizsgálatot, majd ennek megfelelően állítjuk be az egyes értékeket:
constructor TProcessorFeature.Create(AOwner: TComponent);
begin
  FFLOATPOINTPRECERR:=IsProcessorFeaturePresent(0);
  FFLOATPOINTEMU:=IsProcessorFeaturePresent(1);
  FCOMPEXCHDOUBLE:=IsProcessorFeaturePresent(2);
  FMMX:=IsProcessorFeaturePresent(3);
  FSSE:=IsProcessorFeaturePresent(6);
  F3DNOW:=IsProcessorFeaturePresent(7);
  FRDTSC:=IsProcessorFeaturePresent(8);
  FPAEENABLED:=IsProcessorFeaturePresent(9);
  FSSE2:=IsProcessorFeaturePresent(10);
  inherited;
end;
Az egyes értékeket boolean típusúra deklaráltuk. Azért, hogy az Object Inspector-ban a felhasználó ne tudja átállítani a komponens értékeit, készítünk egy közös függvényt, melyre a published property-k write részében hivatkozunk. Mivel a függvény nem tartalmaz kódot, így amikor valaki meg akarja változtatni valamelyik tulajdonság értékét, az eredeti érték marad változatlanul.
A példaprogramunkban egyenként kiolvassuk a komponens által szolgáltatott paramétereket, és annak megfelelően egy ListBox-ba kiíratjuk a megfelelő üzenetet.
  ListBox1.Clear;
  if ProcessorFeature1.PF_3DNOW then
    ListBox1.Items.Add('A processzor támogatja a 3DNOW! utasításkészletet.')
  else
    ListBox1.Items.Add('A processzor nem támogatja a 3DNOW! utasításkészletet.');
  if ProcessorFeature1.PF_COMP_EXCH_DOUBLE then
    ListBox1.Items.Add('A processzor támogatja a double típusú adatok összehasonlító és csere műveletét.')
  else
    ListBox1.Items.Add('A processzor nem támogatja a double típusú adatok összehasonlító és csere műveletét.');
…

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 516. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |