Chrono – Diferența dintre două puncte în timp în milisecunde? (Programare, C++, C++11, Timp, Chrono)

waas191919 a intrebat.

Cum pot obține (folosind biblioteca std::chrono) diferența dintre două puncte în timp în milisecunde?

Aș putea face asta folosind acest lucru:

std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();

std::chrono::time_point<std::chrono::system_clock> foo = now + std::chrono::milliseconds(100);

std::chrono::duration<float> difference = foo - now;

const int milliseconds = difference.count() * 1000;

Cum pot obține acest timp în milisecunde, astfel încât să pot folosi durata ca un int fără semn, și nu un float și apoi să înmulțesc cu 1000?

Comentarii

  • chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count() –  > Por zoska.
  • mi-a luat 2 secunde. google m-a adus aici la răspunsul tău. –  > Por manit.
  • Pentru oricine vine aici după ce a căutat pe Google o modalitate de a obține o diferență de timp în milisecunde: atenție! Această întrebare, și răspunsurile, se concentrează pe modul în care se obține o durată ca un număr întreg cantitate întreagă de milisecunde. Dacă aveți puncte de timp cu o precizie mai mare (de exemplu, nanosecunde) și doriți să păstrați toate cifrele fără trunchiere, dar doriți să le convertiți în milisecunde, puteți utiliza duration_cast<duration<float,std::milli>(difference).count(). Utilizarea duration_cast<milliseconds>(duration).count() va trunchia cifrele, deoarece milliseconds este practic un duration<long,milli>. –  > Por Michele Piccolini.
4 răspunsuri
lisyarus

std::chrono::duration are doi parametri de șablon, cel de-al doilea fiind exact unitatea de măsură. Puteți invoca std::chrono::duration_cast pentru a face cast de la un tip de durată la altul. De asemenea, există un tip de durată predefinit pentru milisecunde: std::chrono::milliseconds. Compunând toate acestea împreună:

auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(foo - now);

Pentru a obține numărul real de milisecunde, utilizați duration::count:

auto ms = milliseconds.count();

Tipul de returnare este duration::rep, , care pentru tipurile de durată standard, cum ar fi std::chrono::milliseconds este un număr întreg cu semn de dimensiune nespecificată.

zoska
chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count()

AceFunk

Am avut probleme cu imprimarea duratei cu litere precum e-09. Iată cum am rezolvat-o:

auto start = std::chrono::high_resolution_clock::now();
< run your function or code here >
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed = finish - start;
std::cout << "Elapsed Time: " << elapsed.count() << " seconds" << std::endl;

Și acum obțin rezultatele dorite:

Elapsed Time: 34.406 seconds

Comentarii

  • Mi se par două lucruri ciudate în acest cod: În primul rând, biblioteca chrono folosește numere raționale (numitori și numitori întregi), așa că folosirea dublei pare ciudată aici. În al doilea rând, nu văd unde are loc conversia din milisecunde în secunde. –  > Por Johan Boulé.
johnjohnlys

http://www.cplusplus.com/reference/chrono/duration_cast/

std::chrono::duration_cast<std::chrono::milliseconds>();