Informatyk, podróżnik, fotograf

Informatyczne podejście do życia w obrazkach, kolorach i dźwiękach

Kamil Porembiński

CPU Frequency w C++ - Rozwiązane

Po długich walkach z Windowsem udało mi się dokopać do kodu, który rozwiązywał mój problem.

int GetCPUSpeed()
{
const
  DelayTime = 500;
  DWORD TimerHi, TimerLo;
int  PriorityClass, Priority;
  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
  }
  Sleep(DelayTime);
  asm
  {
    dw 310Fh
    sub eax, TimerLo
    sbb edx, TimerHi
    mov TimerLo, eax
    mov TimerHi, edx
 }
  SetThreadPriority(GetCurrentThread, Priority);
  SetPriorityClass(GetCurrentProcess, PriorityClass);
  return  TimerLo / (1000 * DelayTime);
}

Kod działał idealnie, kiedy kompilowałem go w Dev-C++, ale miał problemy w C++ Builderze. Kompilacja przechodziła bez problemu, lecz program się wywalał pokazując ładny komunikat z błędem pamięci w adresie. Wystarczyło w opcjach projektu, zakładka Compiler zaznaczyć opcję Stack frames. I wszystko byłoby pięknie, gdyby nie Avast.

Kiedy wysyłałem binarkę koledze, by sprawdził działanie aplikacji, antywirus stwierdził, że aplikacja zawiera szkodliwy kod. Ciekawe ;-)

ikonka 18 września 2007, 18:58:21

Komentarze

Komentować mogą jedynie zalogowani
Składnia Textile Lite jest włączona.

Powered by Jogger. Copyright © 2002-2003 Justin Mecham & JabberPL Group

Licencja: Creative Commons Uznanie autorstwa 3.0