Jak szybko są twoje cykle? Czy są w milisekundach, czy sekundach. Jeśli twoje cykle są krótkie, możesz chcieć zaktualizować ekran dopiero po upływie sekundy.
Na przykład
include <time.h> /* if memory serves me correctly */
int currentTime = time(0);
for (int i = 0; i < 100; i++)
{
/* do work here and save the percentage completed */
lastTime = time(0);
if ((lastTime-currentTime) >= 1)
{
/* output percentage completed (using AraK information) */
currentTime = lastTime;
}
}
To tylko uaktualnić ekran każdy drugi i zaoszczędzić czas, pisząc na ekranie, ponieważ pochłania czas na przerysowanie ekranu (który można wykorzystać do przetworzenia). Ponadto, jeśli twoje aktualizacje idą tak szybko, to pozwala użytkownikowi zobaczyć procent, jeśli twoje cykle są dość krótkie, ponieważ możesz cały czas przerysowywać ekran.
Uwaga: Zaktualizowano na podstawie komentarzy.
W celu dodatkowego oświetlenia, "\ r" wyświetla powrót karetki. –
Możesz chcieć wywołać 'std :: cout.flush()' przed 'Sleep()', ponieważ 'std :: cout' jest zbuforowanym strumieniem, a więc jego zawartość może nie być wyświetlana, gdy oczekujesz. –
Jak mówi Dan, '\ r' jest karetką, która nie * usuwa * linii, po prostu przesuwa kursor z powrotem na początek linii. –