# Laufzeit einer Funktion messen



## Tikonteroga (7. Februar 2010)

Hallo,

ich bin zur Zeit dabei an einer Applikation für LINUX mitzuentwickeln, bei dem ich gewisse Zeitanforderungen einhalten muss.

Dafür habe ich mit den Funktionen timer_create und timer_settime mehrere Timer erstellt die eine Funktion jeweils mit unterschiedlichen Parametern aufrufen. In der Funktion wird dann eine Nachricht (Parameter: Pointer auf zu sendende Datenstruktur) über einen Socket-Funktion verschickt. 

Es soll also das zyklische Senden von Nachrichten realisiert werden. Dies funktioniert bereits wobei ich jedoch nur die Daten der Nachricht mit printf über die Console ausgebe und dafür Intervalle von 1 Sekunde oder höher verwende. Die Socket-Funktion wird in der Praxis aber auch evtl. alle 10 ms aufgerufen und es soll natürlich möglichst auch weniger möglich sein.

Zu meiner eigendlichen Frage:

Ich würde gerne die Ausführungszeit der Socket-Funktion messen, da diese ja möglichst um ein vielfaches kleiner sein muss, als das Intervall in dem ich diese aufrufen möchte.

Gibt es eine möglichkeit die Ausführungszeit der Socket-Funktion oder auch einer beliebigen Funktion mit den Funktionen timer_create, timer_settime und timer_gettime zu messen ? Also ohne einen Timer zu starten der ein Event auslöst oder eine Funktion aufruft.

Ich würde gerne einfach einen Timer bei 0 starten, dann die zu messende Funktion aufrufen und mir gleich danach die abgelaufene Zeit seit 0 zu holen.

Ich hatte an folgendes gedacht:

timer_create(...);  // kein signal feuern oder thread starten
timer_settime(...); // Timer bei 0 starten
<zu messende Funktion aufrufen>
timer_gettime(...); // abgelaufene Zeit seit timer_settime

Ich habe es auch schon so wie gerade beschrieben mit mehreren Parametern versucht, aber ich komme damit nicht so gut zu recht. Die Funktionen sind m. M. sehr schlecht dokumentiert. Bin da eher die Windows API gewöhnt ... 

Ich würde mich freuen wenn mir jemand helfen könnte.

Vielen Dank


----------



## Thomasio (8. Februar 2010)

Genaue Zeitmessung in Millisekunden ist ganz allgemein nicht einfach, weil der Timer selbst auch seine Zeit braucht.
Ein Timer ist nicht präzise, weil er, genau wie alle anderen Befehle, im Messageloop warten muss bis er dran ist.
Im Schnitt wirst du für jeden Aufruf von timer_irgendwas() um die 15ms Verzögerung haben, was Zeitmessung unter 10ms nahezu unmöglich macht.
Ich würde überhaupt keinen Timer verwenden, sondern einfach vorher und hinterher die Systemzeit auslesen.

gettimeofday() dürfte passen, Beschreibung  findest du hier


----------

