[C++] co myślicie o tym stoperze

0

Witam. Tak jak w temacie. Co myśliecie o tym stoperze? Ma on być uruchomiony jako wątek (na razie jest zwykłą klasą). Co myślicie o dokładności tego stopera? przecieŻ po wykonaniu usleep jest wykonywane dość dużo operacji więc może on chodzić trochę wolno. Jest może funkcja która wywoływała by inną zawsze co np 0.01 sek?

#include <iostream>
#include <cstdio>
#include <unistd.h>

class timer
{
	private:
		int msec,sec,min;
		bool st;
	public:
		timer()
		{
			msec=0;sec=0;min=0;
			wyswietl(min,sec,msec);
			st=false;
		}
		
		void start()
		{
			st=true;
			run();
		}
		
		void stop()
		{
			st=false;
		}
		
		void run()
		{
			while(st)
			{
				usleep(10000);
				msec++;
				if(msec>99)
				{
					sec++;
					msec=0;
				}
				if(sec>59)
				{
					min++;
					sec=0;
				}
				wyswietl(min,sec,msec);
			}
		}
		void wyswietl(int min,int sec,int msec)
		{
			if(min==0)
				std::cout<<"00";
			else
				std::cout<<min;
			std::cout<<":";
			if(sec==0)
				std::cout<<"00";
			else if(sec>0&&sec<10)
				std::cout<<"0"<<sec;
			else
				std::cout<<sec;
			std::cout<<":";
			if(msec==0)
				std::cout<<"00";
			else if(msec>0&&msec<10)
				std::cout<<"0"<<msec;
			else
				std::cout<<msec;
			std::cout<<std::endl;
		}

};

int main ()
{
	timer t;
	t.start();
  return 0;
}
0

W wywołaniu usleep(10000); jest o jedno zero za dużo. Używałem podobnego sposobu w qt. Klasa dziedziczyła po QThread, sprawdzała port rs232 250x/sec, i nie miałem zastrzeżeń. W testach na athlonie X2 4200+ rozbieżność z zegarem systemowym wynosiła mniej niż 10usec. Ale im wolniejsza maszyna tym w teorii powinno być gorzej. Sprawdź sobie klasę QTimer, może znajdziesz lepsze rozwiązanie.

0

Jeśli odjemę jedno zero to stoper wariuje. Sprawdzałem go ze stoperem w telefonie komórkowym oraz ze stroną http://pl.e-stopwatch.eu/ i po pewnym czasie różnica pomiędzy stoperami zaczyna się powiększać. Mój stoper działa wolniej. Spróbuje go dopracować ale nie wiem co mi z tego wyjdzie. Napisałem jeszcze jeden wątek na forum z funkcją której poszukuje. Klasę QTimer przeglądałem i nic nie znalazłem ale zobaczę jeszcze raz.

Ps. iskramac masz rację. Użyłem Qtimer iteraz jest tak jak ma być. Dzięki.

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