Portál AbcLinuxu, 4. června 2024 06:13


Dotaz: C++ měření času

17.12.2010 10:37 krb | blog: herni_blog
C++ měření času
Přečteno: 1184×
Odpovědět | Admin
Zdravím, potřeboval bych do jednoho programu, který píšu v C++ zapasovat měření času, resp. odpočítávání 30 vteřin a jakmile by je odpočítal, spustilo by to nějaký proces nebo funkci. Nevíte si s tím někdo rady?

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

17.12.2010 10:45 jam001 | skóre: 19
Rozbalit Rozbalit vše Re: C++ měření času
Odpovědět | | Sbalit | Link | Blokovat | Admin
pomoze sleep?
17.12.2010 10:52 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: C++ měření času
Odpovědět | | Sbalit | Link | Blokovat | Admin
V nejhorším čas můžete měřit pomocí gettimeofday() a v cyklu si to kontrolovat a udělat „bum“ po daném intervalu.
V trochu lepším případě můžete udělat smyčku ze sleep(30) a před tím nebo za tím udělat „bum“.
Nebo můžete spustit thread (#include <pthread.h>) a pomocí pthread_cond_timedwait() ve smyčce udělat „bum“.
Nebo použít libovolný timer.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
17.12.2010 11:20 l4m4
Rozbalit Rozbalit vše Re: C++ měření času
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud má program GUI, tak se povídej do dokumentace toolkitu, timery jsou běžně součástí smyčky událostí (byť ne velmi přesné).

Na nízké úrovni naopak můžeš použít setitimer() a přijde ti SIGALARM.
AraxoN avatar 17.12.2010 11:29 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: C++ měření času
Odpovědět | | Sbalit | Link | Blokovat | Admin
Cez signal() si nahodíš handler na SIGALRM a cez alarm() si nastavíš kedy sa má spustiť.

Viď tiež:
man 2 signal
man 2 alarm
17.12.2010 15:38 krb | blog: herni_blog
Rozbalit Rozbalit vše Re: C++ měření času
Odpovědět | | Sbalit | Link | Blokovat | Admin

int main()
{
  cout << "Ahoj";
  sleep(2);
  cout << " Jak je?";
  cout << endl;
  
  return 0;
}
Pokud do zdroje vložím tento kód, tak to sice funguje, ale program po 2 sekundách napíšech Ahoj Jak je? a přitom by měl napsat Ahoj a po dvou sekundách Jak je? Nevíte v čem mám chybu?
Vojta Drbohlav avatar 17.12.2010 15:44 Vojta Drbohlav | skóre: 26 | blog: Blog | Strahov
Rozbalit Rozbalit vše Re: C++ měření času
Za cout << "Ahoj" musíš použít funkci ostream::flush() a nebo std::cout << std::endl;, který vypíše nový řádek a provede flush.
17.12.2010 15:51 krb | blog: herni_blog
Rozbalit Rozbalit vše Re: C++ měření času
Jo, díky, teď už to funguje. A nevíš jak bych mohl udělat, aby vlastně po sleep(2) napsal něco jinýho na stejné místo, kde bylo to předchozí a to předchozí vymazal? Jako že když chci udělat odpočítávání tak
cout << "0:30"
sleep(1);
cout << "0:29 /na stejné místo jako bylo 0:30
17.12.2010 16:30 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: C++ měření času
Můžete použít backspace ('\b') nebo rovnou CR ('\r'). Pravděpodobně také bude potřeba dát tam flush kvůli bufferování výstupu.
17.12.2010 16:42 krb | blog: herni_blog
Rozbalit Rozbalit vše Re: C++ měření času
Tak mi to nešlo, protože na předchozí řádek se to nevrátí. Ale pak jsem přišel jak na to, místo
std::cout << std::endl
jsem napsal
std::cout << std::flush;
a už se to přepisuje. Takže jinak díky za rady :)
17.12.2010 21:52 krb | blog: herni_blog
Rozbalit Rozbalit vše Re: C++ měření času
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem se během psaní potkal s dalším problémem. V programu jsem si vytvořil funkci timer();, která odpočítává 30 vteřin. V jedné části má uživatel právě 30 vteřin na rozhodnutí se, co zvolí za volbu. Vypadá to asi nějak takhle:

Vyberte: 1) ano 2) ne >> 0:30

Ale problém je v tom, že kurzor si sám najede na to odpočítávání 0:30 a přitom by měl být za
>>
těmito znaky.
18.12.2010 03:54 zulu
Rozbalit Rozbalit vše Re: C++ měření času
tak ho tam posuň
19.12.2010 19:35 krb | blog: herni_blog
Rozbalit Rozbalit vše Re: C++ měření času
To právě nejde, ono to prostě kurzorem najede na to odpočítávání a ten výstup napíše až to odpočítá

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.