Czas

0

Jak zrobić w czystym C++, żeby jakaś funkcja powtarzała się co ileś tam minut(lub godzin) i żeby bardzo nie spowalniała pracy kompa?

0

co rozumiesz pod określeniem "spowalniać pracę kompa" ?
co będzie robiłą ta funkcja ?
tu chyba zależy wiele od tego jak jest napisana .....
a co do tego jak to zrobić to dokłądnej odpowiedzi ci nie udzielę tzn nie podam kodu bo sam tego jeszcze nie robiłem ale wydaje mi się że musisz sprawdzać stan zegara i w momencie gdy zajdzie warunek przez ciebie określony (czyli określona wartość zegara ) to będzie się uruchamiała ta funkcja.
mozna to zrobić w ten sposób że program sprawdza stan minut. gdy jest 00 (czyli pełna godzina) to inkrementuje jakąś tam zmienna. gdy zmienna >3 (jesli chcesz aby się np. uruchamiała tan funcja co 4 godziny to: uruchom funkcje ...
co do obsługi zegara to juz musisz dam poszukać.
powodzenia

0

A nie wystarczy

bool stop=false;

while(!stop)
{
sleep(1000)
//tutaj jakieś instrukcje
}

0

po prostu zrob w programie petle i sprawdzaj w niej czas... mozesz uzyc sleep lub delay, ale lepiej uzyj funkcji z time.h (przenosnosc).

0

Wersja ze sleep-em jest niezla - wtedy jednak jesli program ma robic jeszcze cos, to trzeba uruchomic to w oddzielnym watku. W Linux/Unix dobry jest nanosleep, bo ma niezla rozdzielczosc. Mozna tez uzyc sygnalu ALARM, a w Windoze SetTimer.

0

A i jeszcze jedno: robienie petli, ktora sprawdza czas jest glupie, bo wtedy wlasnie taka petla spowalnia prace kompa - nic nie wykonuje, ale sie kreci.

0

heh w sumie to prawda ale to chyba jedyna w 100% przenosna metoda :)
poza tym inne funkcje z reguly takze wchodza w petle i czekaja na wksazania generatora...

0

Przenosny jest sleep, nanosleep i select. Funkcje te sa zdefiniowane w standardzie POSIX. To Windows jest nieprzenosny ze swoim Sleep. Jak ktos chce miec przenosne, to moze sobie uzyc kompilacji warunkowej.
Nie znam porzadnego systemu, w ktorym funkcja typu sleep wchodzilaby w jakas petle. Chyba tylko w Dosie w Pascalu robil tak delay, ale tam nie mialo to zadnego znaczenia, bo i tak tylko 1 proces mogl sie wykonywac na raz.

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