Witam!
Piszę symulator przyznawania stron ramkom. W swoim programie używam algorytmu LRU. Niestety zaobserwowałem dziwne zjawisko:
- 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;
}
- 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;
}