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;
	}	
  1. 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