blondynaa Opublikowano 6 Października 2005 Zgłoś Opublikowano 6 Października 2005 Witam! Mam maly problem, no wiec chcialabym aby program po wykonaniu konkretnego algorytmu wypisal z dokladnoscia do milisekund ile zajelo czasu wykonanie tego algorytmu. Wiem ze trzeba skorzystac tu z biblioteki time.h tylko nie bardzo wiem jak jej uzyc. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
antrykot111 Opublikowano 6 Października 2005 Zgłoś Opublikowano 6 Października 2005 Proponuje użyć DWORD timeGetTime(VOID); Windows NT/2000/XP: Included in Windows NT 3.1 and later. Windows 95/98/Me: Included in Windows 95 and later. Header: Declared in Mmsystem.h; include Windows.h. Library: Use Winmm.lib. Przed startem algorytmu pobierasz czas, wykonujesz wszystkie operacje, i znów pobierasz czas. Potem już tylko trzeba odjąć i masz wynik :) Funkcja ta zwraca czas w milisekundach. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
jg5 Opublikowano 6 Października 2005 Zgłoś Opublikowano 6 Października 2005 (edytowane) mozna tez zrobic tak: ...#include <time.h>...int main() {int czas1, czas2;czas1=clock(); // za czas1 zostanie wstawiony czas w milisekundach od momentu wlaczenia programu// tutaj wstawic algorytmczas2=clock();czas2=czas2-czas1; } nie wiem czy to jest w 100% poprawne bo z glowy pisze, ale wydaje mi sie ze powinno dzialac. Edytowane 6 Października 2005 przez jg5 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 6 Października 2005 Zgłoś Opublikowano 6 Października 2005 mozna tez: #include <windows.h> int main() { DWORD t1, t2; t1=GetTickCount(); //tutaj twoj algorytm t2=GetTickCount() - t1; cout << t2; return 0; } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
blondynaa Opublikowano 6 Października 2005 Zgłoś Opublikowano 6 Października 2005 Dziekuje za pomoc, hmm wszystko jest ok jezeli to co mi wyzej napisaliscie wstawie na poczatku i na koncu programu to wypisze mi czas wykonywania programu, jednak gdy wstawie to do konkretnej procedury to wtedy nie obliczy czasu, czy idzie jakos zrobic zeby obliczyc czas wykonania samej procedury? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
antrykot111 Opublikowano 6 Października 2005 Zgłoś Opublikowano 6 Października 2005 Dziekuje za pomoc, hmm wszystko jest ok jezeli to co mi wyzej napisaliscie wstawie na poczatku i na koncu programu to wypisze mi czas wykonywania programu, jednak gdy wstawie to do konkretnej procedury to wtedy nie obliczy czasu, czy idzie jakos zrobic zeby obliczyc czas wykonania samej procedury? 1686727[/snapback] Co rozumiesz przez nie obliczy czasu ? Jeśli jest zero to znaczy że dana procedura wykonywała sie za krótko ( < 1ms) Jeśli chcesz testować szybkość algorytmu, to wykonaj go w pętli np 1000 razy i wtedy wynik będzie dobry :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
blondynaa Opublikowano 6 Października 2005 Zgłoś Opublikowano 6 Października 2005 no wlasnie 0 mi wychodzilo i dlatego ze petla sie za malo razy sie wykonywala dzieki bardzo za podpowiedz Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
MeHow Opublikowano 9 Października 2005 Zgłoś Opublikowano 9 Października 2005 po prostu piszesz bardzo wydajne programy ;] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 9 Października 2005 Zgłoś Opublikowano 9 Października 2005 Mozna tez to zmierzyc za pomoca QueryPerformanceCounter i QueryPerformanceFrequency. Jest znacznie dokladniejszy niz GetTickCount, aczkolwiek wiele zalezy od systemu (np. Win98 ma malo dokladne mozliwosci pomiaru i GetTickCount na tym systemie ma dokladnosc ok 55ms, podczas gdy na XP jest to AFAIR ok 10ms). Lepiej jednak polaczyc te metody i zarowno uzyc dokladniejszych metod pomiaru, jak i mierzyc kilku(set)krotne wykonanie danego kawalka kodu. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
antrykot111 Opublikowano 9 Października 2005 Zgłoś Opublikowano 9 Października 2005 Mozna tez to zmierzyc za pomoca QueryPerformanceCounter i QueryPerformanceFrequency. Jest znacznie dokladniejszy niz GetTickCount, aczkolwiek wiele zalezy od systemu (np. Win98 ma malo dokladne mozliwosci pomiaru i GetTickCount na tym systemie ma dokladnosc ok 55ms, podczas gdy na XP jest to AFAIR ok 10ms). Lepiej jednak polaczyc te metody i zarowno uzyc dokladniejszych metod pomiaru, jak i mierzyc kilku(set)krotne wykonanie danego kawalka kodu. 1692185[/snapback] Na innym forum jakiś czas temu była o tym dyskusja. W sumie wyszło na to, że GetTickCount ma taką dokładność jak mówisz, a timeGetTime jest do 1ms, i dla zwykłych zastosowań w zupełności wystarczy. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 23 Lutego 2007 Zgłoś Opublikowano 23 Lutego 2007 siemka. odkopuje temat by nowego nie zakladac. Jak zrobic zeby wyswietlal sie czas wykonywania petli? Musi wie wyswietla c w formacie: 0h 00m 00s probowalem uzyc tego co tu wczesniej pisaliscie ale nie daje to takiego wyniku :( Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 23 Lutego 2007 Zgłoś Opublikowano 23 Lutego 2007 Jak masz wynik w sekundach (albo ms, ale to latwo "przeliczyc" na sekundy) to trzeba dokonac odpowiednich przeksztalcen, aby wyciagnac ilosc godzin, minut i sekund. Z grubsza bedzie wygladalo to tak: int h, m, s;s = time % 60; // reszta z dzielenia ilosci sekund przez 60 daje nam "koncowke"m = (time / 60) % 60; // dzielimy przez 60, aby uzyskac ilosc minut, ale interesuje nas tylko reszta z dzielenia przez 60, aby przy czasie >1h nie otrzymac dziwnych wynikowh = time / 3600; // dzielimy przez ilosc sekund w godzinie i mamy ilosc godzin Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
xacti Opublikowano 23 Lutego 2007 Zgłoś Opublikowano 23 Lutego 2007 (edytowane) no dobra. to program caly wyglada tak: #include <cstdlib>#include <iostream>#include <windows.h>main (void){long long double a,b,c,d; int t1, t2, h, m, s; t1=GetTickCount();for (a = 1; a <= 1024; a++) { b=a; c=a * 24 * a; d=a * 102400 / 3; std::cout << a * b << std::endl; std::cout << a * c << std::endl; std::cout << a * d << std::endl; std::cout << c * d << std::endl; } std::cout << "Test passed.\n" << std::endl;t2=GetTickCount() - t1;s = t2 % 60; // reszta z dzielenia ilosci sekund przez 60 daje nam "koncowke"m = (t2 / 60) % 60; // dzielimy przez 60, aby uzyskac ilosc minut, ale interesuje nas tylko reszta z dzielenia przez 60, aby przy czasie >1h nie otrzymac dziwnych wynikowh = t2 / 3600; // dzielimy przez ilosc sekund w godzinie i mamy ilosc godzinstd::cout << h << std::endl; std::cout << m << std::endl; std::cout << s << std::endl; system("Pause");}tylko mam problem. bo jak program dziala 1 sek to mi wyswietla: h 0 m 6 s 31 wtf? :? EDIT! Juz rozwiazalem problem :) s = t2 / 1000; // reszta z dzielenia ilosci sekund przez 60 daje nam "koncowke"m = (s / 60) % 60; // dzielimy przez 60, aby uzyskac ilosc minut, ale interesuje nas tylko reszta z dzielenia przez 60, aby przy czasie >1h nie otrzymac dziwnych wynikowh = s / 3600; // dzielimy przez ilosc sekund w godzinie i mamy ilosc godzins = (t2 / 1000) - (60 * m); // reszta z dzielenia ilosci sekund przez 60 daje nam "koncowke"std::cout << h << std::endl; std::cout << m << std::endl; std::cout << s << std::endl; Edytowane 23 Lutego 2007 przez xacti Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...