Duże obciążenie procesora przez prosty program

0

Mój program to nic innego jak prostacki stoper odliczający sekundy od uruchomienia programu:

 #include "stdafx.h"
#include <iostream>
#include <ctime>


using namespace std;

const int N=600;

int main(void)
{
	int formerValue;
	int currentValue;
	
	clock();
	
	for(int i=0; (clock()/1000)<N ; i++)
	{	
		currentValue=clock()/1000;
		if(formerValue !=currentValue )
		{				
			cout<<currentValue<<endl;
			formerValue=currentValue;
		}
		else continue;
	}

	cout<<endl;

	system("PAUSE");
}


Działa, ale zużycie procesora sięga rzędu 30% ( tyle co przy grach 3D!). Pytania są dwa:

  1. Dlaczego tak się dzieje?
  2. Jaka jest alternatywna droga do wypełnienia algorytmu(funkcje spoza biblioteki standardowej?) , tak żeby oszczędzić zasoby systemu.
1
  1. Dlaczego tak się dzieje?

twój kod wygląda tak:

        for(bardzo długo)
        {        
                if(tylko czasami )
                {                                
                           coś tam();
                }
        }

jest to tzw. „ciasna pętla”. procesor z wyjątkiem wywołań clock i cout cały czas spędza czas w twoim programie. dla systemu operacyjnego oznacza to 100% zajętości (mniej jeśli procesor jest dual/quad).

Jaka jest alternatywna droga

najprościej, to dodaj wewnątrz pętli Sleep(1000) (wymaga include <windows.h>). to zatrzyma program na około jedną sekundę, i w zasadzie możesz wyrzucić sprawdzanie czy clock() się zmieniło.
prawidłowo to należałoby użyć systemowego timera.

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