الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Cpu Speed

بدأه in4maTic في 4 مارس 2008 · 2 رد · 867 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم...

الأخوة الأعزاء! الكود التالي يقوم بحساب سرعة المعالج... يتم فيه أولاً إعادة مستوى أولوية العملية الحالية... تخصيص أعلى مستوى أولوية لهذه العملية (أكبر عدد من دورات الساعة)... وقبل إعادة النتيجة يتم إعادة مستويات الأولوية السابقة... هذا ما فهمت من الكود أما القسم الخاص بالتأخير الزمني وكود لغة التجميع فلم أعرف الغاية منه بالضبط... أرجو ممن لديه خبرة في هذا الأمر المساعدة...

function  GetCpuSpeed : Single;
const DelayTime = 500;
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin

  PriorityClass := GetPriorityClass(GetCurrentProcess);
  Priority := GetThreadPriority(GetCurrentThread);
  SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
  SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
  Sleep(10);
  asm
  dw 310Fh
  mov TimerLo, eax
  mov TimerHi, edx
  end;
  Sleep(DelayTime);
  asm
  dw 310Fh
  sub eax, TimerLo
  sbb edx, TimerHi
  mov TimerLo, eax
  mov TimerHi, edx
  end;
  SetThreadPriority(GetCurrentThread, Priority);
  SetPriorityClass(GetCurrentProcess, PriorityClass);
  Result := TimerLo / (1000 * DelayTime);
end;

جزاكم الله خيراً...

المال في الغربة وطن والفقر في الوطن غربة

#2
in4maTic كتب:
وكود لغة التجميع فلم أعرف الغاية منه بالضبط.

dw 310Fh = RDTSC = Read Time Stamp Counter = ياخذ عداد الوقت من المعالج

يسترجع قيم الوقت من السجلات eax و edx ويضعه في المتغييرات TimerLo و TimerHi

ينتظر قدر معين من الزمن DelayTime

ياخذ عداد الوقت من المعالج مرة ثانية

يطرح من الوقت المسترجع الوقت الذي حفظه في المتغيرات TimerHi و TimerLo

وفي الاخير يحسب سرعة المعالج بقسمة الوقت الناتج -نتيجة الطرح- على الوقت المتوقف DelayTime

والسلام عليكم ورحمة الله

d4baa0.gif
#3

جزيل الشكر لك أستاذي العزيز....

بارك الله فيك...

المال في الغربة وطن والفقر في الوطن غربة

مواضيع مشابهة