Funktion nach 4ms abbrechen
-
Hallo zusammen,
Fällt jemandem eine Methode ein, um eine Funktion nach einer bestimmten Zeit abzubrechen. Ich habe einen Socket programmiert. Der Sendet an einen zweiten PC und erwartet innerhalb von 4ms eine Antwort. Wird nicht innerhalb von 4ms geantwortet muss ich eine Variable incrementieren und der Vorgang (Senden-Empfangen) begint von Neuem.
Leider hat die Empfangen Funktion selbst kein Timeout. Kann ich das irgendwie ergänzen? Ich würde ungern Threads nehmen. Ich arbeite in einem Realzeitkontext und kann ich abschätzen wie ein weiterer Thread das System beeinflusst.
Gruss,
flambert
-
Hey,
die funktion#include <ctime> time(NULL);
liefert dir die aktuelle Zeit in ms. Leg doch einfach eine Variable mit der Anfangszeit an. Anschließend eine schleife in der du erneut die aktuelle Zeit abfragst, wenn die Differenz größer als 4 ist lässt du die Funktion abrechen.
Beispiel:#include <ctime> bool send () { long SZeit = time(NULL); long AZeit = SZeit; while (AZeit - SZeit < 4) { ... AZeit = time(NULL); } return false; // oder was immer du willst ;) }
mfg
-
#include <stdio.h> #include <signal.h> #include <unistd.h> void dummy(int s) { } void receive() { char buf[256]; puts("Eingabe (4000µs Zeit): "); if (scanf("%255s", buf)) puts(buf); } int main() { struct sigaction act; act.sa_handler = &dummy; act.sa_flags = 0; sigemptyset(&act.sa_mask); sigaction(SIGALRM, &act, NULL); ualarm(4000, 0); /* 4000µs=4ms */ receive(); /* wird nach 4ms abgebrochen */ }