Zdarte, robím program, ktorý má odpočítavať čas, tj. povedzme užívateľ zadá 60 sekúnd, tak sa bude odpočítavať 60, 59, ....atď. Všetko by bolo v poriadku, ale neviem, ako zabezpečiť, aby sa výpis na obrazovke refreshoval.Vie mi s tým niekto poradiť? Thx.
Fórum › C / C++
Odpočítavanie času
Môj problém načrtnem na príklade jednoduchého zobrazenia aktuálneho času. Povedzme že mám takýto kód:
time_t rawtime;
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime(&rawtime);
printf("Aktuálne je %d.%d.%d, %d:%d:%d\n", timeinfo->tm_mday, timeinfo->tm_mon+1, timeinfo->tm_year + 1900, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
Takýto program mi vypíše povedzme
Aktuálne je 26.2.2010, 8:25:1
No ja by som potreboval aby sa ten čas refrešoval, čiže každú sekundu by sa ten vypísaný čas zmenil.
Keby som program vždy na sekundu uspal a vypísal čas znova, tak by som ho tam mal vypísaný viac krát, čo ja samozrejme nechcem.
To gaben :
#include<iostream>
#include<time.h>
#include <dos.h>
using namespace std;
int main()
{
cout<<"Cas : ";
int d = 0;
int i;
cin>>i;
do{
sleep(1);
i--;
d +=i;
cout<<i<<"\n";
}while(i!=0);
cout<<"Konec Soucet vsechsekund je "<<d;
system("pause");
Anonymní uživatel: Buď som zle vysvetlil o čo sa snažím, alebo si ma nepochopil. Ja potrebujem aby bol zostávajúci čas vypísaný iba raz a prepisoval sa, nie aby sa vypisovalo 50, 49, 48 atď, ale aby bolo 50 a potom sa to prepísalo na 49, tj. naraz bude vypísané iba jedno číslo.
V podstate to už funguje, až na to že som musel použiť system("clear") namiesto system("CLS"), pretože robím pod linuxom. Zaujímalo by ma však, ako je napríklad moźné, že keď je v konzole nejaký progressbar (napríklad keď sťahuješ niečo v linuxe cez konzolu pomocou wget), tak sa tam mení stav toho progressbaru bez toho, aby sa neustále mazal celý obsah konzoly? Keby sa toto dalo spraviť nejakým podobným spôsobom, tak by to bolo úplne ideálne :)
To gaben :
#include<iostream>
#include<time.h>
#include <dos.h>
using namespace std;
int main()
{
cout<<"Cas : ";
int d = 0;
int i;
cin>>i;
system("cls");
do{
sleep(1);
system("cls");
i--;
d +=i;
cout<<i<<"\n";
}while(i!=0);
cout<<"Konec Soucet vsechsekund je "<<d;
system("pause");
}
No ako teraz rozmýšlam, nebude to dobré, pretože potrebujem dosiahnuť aj to, že aby sa pri stlačení určitej klávesy odpočítavanie zastavilo, čiže by som musel použiť nejaké ďalšie knižnice (SDL a pod.)....s tými vláknami je to ako?
Pokud zmacknes mezernik, tak by to melo skoncit...
#include<iostream>
#include<time.h>
#include <dos.h>
using namespace std;
int g_continue=1;
void vlakno(){
if(GetAsyncKeyState(VK_SPACE)){
g_continue=0;
return;
}
}
int main()
{
cout<<"Cas : ";
int d = 0;
int i;
cin>>i;
system("cls");
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) vlakno, NULL, 0, NULL);
do{
sleep(1);
system("cls");
i--;
d +=i;
cout<<i<<"\n";
}while(i!=0 && g_continue);
cout<<"Konec Soucet vsechsekund je "<<d;
system("pause");
}
EDIT...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Cas - odpocitavanie v pozadi — založil martin.007
Vytvoření rozsahu času (od-do) ze seznamu časů — založil CZechBoY
Porovnávání času — založil Patrik
Zmena času na PC — založil zonda
Moderátoři diskuze