Błędny pomiar czasu.

0

Witam!
Piszę symulator przyznawania stron ramkom. W swoim programie używam algorytmu LRU. Niestety zaobserwowałem dziwne zjawisko:

  1. Tworzę tabelę:

    zbior_roboczy = new workingset_class [wielkosc_okna]; 

    Gdzie każdy el. tworzony jest kontruktorem:

    workingset_class(page s, DWORD current_time = GetTickCount() )
    {
    
        strona = s;         
        lru_delimeter = current_time;
    }   
  2. Kilkadziesiąt linii niżej sprawdzam który el. jest najstarszy z zamiarem zastąpienia go:

    DWORD now = GetTickCount();
             long diff_time = 0;
             long temp;
             int najstarszy;
    
             zbior_roboczy[0];
             zbior_roboczy[1];
             zbior_roboczy[2];
             for (int j = 0;j<wielkosc_okna;j++)
             {
                 temp = (long)now - zbior_roboczy[j].return_time();
                 if (diff_time <= temp)
                 {
                     diff_time = temp;
                     najstarszy = j;
                 }
             }

Wiem, że każdy el. ma na początku taki sam czas i wybrany powinien być el. nr 0, jednak czas zmiennej now zawsze jest znacznie mniejsza niż ta zwracana z tablicy. To jest poważny problem, gdyż wyniki są mniejsze od zera, co powoduje błędne działanie programu. Próbowałem także z metodami time_t i clock_t z biblioteki time.h. Jednakże wynik jest taki sam. Co robię źle?

PS. Załączę zeszczę kod metody return_time()

DWORD return_time()
    {
        return lru_delimeter;
    } 
0

jakiego typu jest zbior_roboczy?

zbior_roboczy = new workingset_class [wielkosc_okna];

dziwny zapis.

zbior_roboczy[0];
zbior_roboczy[1];
zbior_roboczy[2];

co to ma robić?

0

To sobie utworzyłem, żeby podczas breakpoint sprawdzać jakie wartości mam w tablicy.

zbior_roboczy jest typu workingset_class

0

zbior_roboczy jest typu workingset_class
przecież to się nie skompiluje tak jak podałeś.
pokaż definicję tego zbior_roboczy.

0
 class workingset_class
{
    page strona;
    DWORD lru_delimeter;
public:
    workingset_class(page s, DWORD current_time = GetTickCount() )
    {

        strona = s;         
        lru_delimeter = current_time;
    }   
    workingset_class()
    {
            strona.set(-1);
            lru_delimeter  = GetTickCount();

    }   
    void update()
    {
        lru_delimeter  = GetTickCount();
    }
    int return_page()
    {
        return strona.get_number();
    }
    DWORD return_time()
    {
        return lru_delimeter;
    }

};

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0