السلام عليكم...
الأخوة الأعزاء! الكود التالي يقوم بحساب سرعة المعالج... يتم فيه أولاً إعادة مستوى أولوية العملية الحالية... تخصيص أعلى مستوى أولوية لهذه العملية (أكبر عدد من دورات الساعة)... وقبل إعادة النتيجة يتم إعادة مستويات الأولوية السابقة... هذا ما فهمت من الكود أما القسم الخاص بالتأخير الزمني وكود لغة التجميع فلم أعرف الغاية منه بالضبط... أرجو ممن لديه خبرة في هذا الأمر المساعدة...
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;
جزاكم الله خيراً...
