Pomiar czasu, który sposób dokładniejszy

0

Mam watek przetwarzajacy pewne dane w grze multiplayer. Kazde przetworzenie musi nastepowac w miare rownych odstepach czasu. Zalozmy ze jest to 100ms, i teraz pytanie:

  • czy lepiej w petli watku dac Sleep(100),

czy tez

  • mierzyc przy pomocy GetTickCount roznice milisekund i w odpowiednim momencie wykonac akcje?

Wydaje mi sie ze 2 pomysl jest dokladniejszy gdyz eliminuje ew. straty czasu powstale w trakcie wykonywania operacji przetworzenia, jednakze trzeba cialge sprawdzac czas...

Serwer gry posiadac moze do 32 takich watkow... ktora metoda zapewni mi dobre rezultaty jakosciowe i wydajnosciowe wg. was? Nie chodzi o to aby operacja byla idealnie co 100ms, ale aby sredni czas miedzy byl 100ms, tj jeden moze trwac 90 ale wtedy drugi musi 110 aby trzymac sie wytycznych.

0

Ciekawe czy przypadkiem nie idziesz na około tworzac co pewnien czas jakies zapytania (te co 100 ms)

nie uzywaj sleep bo to zwiesza aplikacje lepsze juz gettickcount ale co to za bzdura z tymi 100 ms?!?!!?!?!!

0

No przeciez pisze ze mam to w watku wiec Sleep nic mi nie zawiesza.
Nie ide na okolo, przetwarzam dane polaczenia, wysylam ping czy inne rzeczy w grze multi.
Widze ze chyba nie masz pojecia o czym mowie.

0

Wg. mnie Sleep w ogóle nie powinien wchodzić w rachubę, gdy średni czas między operacjami chcesz mieć na ustalonym poziomie. Poza tym, z GetTickCount możesz wszystkie te 32 procesy obliczeniowe scalić w jeden: raz odczytujesz GetTickCount, sprawdzasz, czy nie minął czas dla kolejnych funkcji obliczeniowych i ewentualnie je wykonujesz. Potem sprawdzasz ponownie.

Jak chcesz odciążyć trochę procesor, to połącz obie metody. Liczysz, ile czasu zostało do najbliższej operacji - jeśli powiedzmy powyższej 5ms, to robisz Sleep(czas-5) i dla dokładności sprawdzasz czas tylko przez ostatnie 5ms, w przeciwnym razie od razu przechodzisz do ciągłego sprawdzania. Proste w wykonaniu, a zarazem i dokładne i nie obciąża bardzo procesora.

Sleep byłby dobry, gdyby nie zależało Ci na dokładności w ogóle, ale za to ważne byłoby samo obciążenie procesora.

0

No wlasnie scalenie w jedno niezbyt wchodzi w rachube, w zaleznosci od tego w jakim stanie jest dane polaczenie do serwera sa podejmowane inne akcje, wszystko jest zamkniete w jednej klasie.

Ostatecznie rozwiazalem to tak:

Sleep na 10 ms mam i po tym czasie sprawdzam GetTickCount ile uplynelo i podejmuje akcje (gdyz rozne czynnosci maja rozny intervale).

1 użytkowników online, w tym zalogowanych: 0, gości: 1