2013-02-23 17 views
5

Byłem pewien, że to pytanie zostało zadane wcześniej, więc skorzystałem oczywiście z funkcji wyszukiwania, aby sprawdzić, czy istnieje odpowiedź na mój problem.Czasomierz ObjC/C/C++ o wysokiej rozdzielczości z oddzwonieniem

Jednak wszystko, co mogłem znaleźć, zawierało wiele odpowiedzi na temat mierzących czas z wysoką precyzją.

Potrzebny jest zegar o wysokiej rozdzielczości (co najmniej milisekundy), który pozwala mi wywołać wywołanie zwrotne po upływie określonego czasu. Chciałbym użyć tego w aplikacji Cocoa Mac OS X, więc C/C++ lub Obj-C będzie możliwe. Jeśli potrzebne są dodatkowe biblioteki, to też jest w porządku.

Znalazłem to http://www.songho.ca/misc/timer/timer.html, ale korzystam z strategii "oczekującego oczekiwania" i kosztowałoby to zbyt dużo wydajności, jak sądzę.

Pomoc jest bardzo cenna!

+3

C lub C++? Wybierz jedno. –

+0

Nie znam kakao, ale powinieneś przeczytać więcej o jego mechanizmie pętli zdarzeń; na pewno da ci to kilka minut lub sondowanie ... Zasadniczo powinieneś dowiedzieć się, jak zarejestrować wywołanie zwrotne zdarzenia timeout. –

+0

To pytanie wydaje się mieć twoją odpowiedź: http://stackoverflow.com/questions/464618/whats-the-equivalent-of-windows-queryperformancecount-on-osx (druga odpowiedź: w OSX mach_absolute_time i mach_timebase_info są najlepszymi odpowiednikami Win32 QueryPerformance * funkcje.) –

Odpowiedz

6

Jedna z doskonałych technologii, z której można korzystać, pochodzi bezpośrednio od firmy Apple. Źródła czasowy wysyłkowy:

http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/GCDWorkQueues/GCDWorkQueues.html

To zajmie trochę czasu, aby czytać, ale gdy się go, jest dość łatwy w użyciu. Możesz określić przedział czasu w nanosekundach oraz blok, który powinien być okresowo wykonywany.

Jest to część technologii GCD i bazuje na C. Ponieważ Objective-C jest po prostu C plus kilka dodatków, wydaje się bardziej naturalne po prostu trzymać się C. Przechodząc do C++, a tym samym Objective-C++ wydaje się być przesadą w tym przypadku.

+0

To wygląda świetnie! Nie wiedziałem, że GCD też może to zrobić! Dziękuję za odpowiedź! – guitarflow

+0

To powinno być podniesione w wynikach wyszukiwania dla precyzyjnych wyszukiwań czasu na kakao. To jest niesamowite. – uchuugaka

6

Możesz używać GCD bezpośrednio z Apple. W systemie Mac OS X GCD jest dostępny od wersji 10.7.

double delayInMilliseconds = 100.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInMilliseconds * NSEC_PER_MSEC)); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    // callback invocation 
}); 
+0

Idealnie! Dzięki. Zajrzę do tego. – guitarflow

Powiązane problemy