Zeitfenster
-
Ich bekomme "impulsmäßig" WindowsNachrichten(RS232), die eine Funktion auslösen.
Gibt es eine Möglichkeit zu sagen, das wenn nach X Sekunden keine Nachricht eintrifft, dann beende eine Funktion?
-
Sveniemenie schrieb:
Ich bekomme "impulsmäßig" WindowsNachrichten(RS232), die eine Funktion auslösen.
Gibt es eine Möglichkeit zu sagen, das wenn nach X Sekunden keine Nachricht eintrifft, dann beende eine Funktion?Vielleicht so etwas?
struct MyThreadData{ HANDLE hEvent; BOOL volatile bRun; }; unsigned WarteAufNachrichten( MyThreadData * p ){ while(InterlockedExchangeAdd((LONG volatile*)&p->bRun,0)){ int nachricht = Warte(); // blockierend SetEvent(*p); } return 0; } int main(){ unsigned threadID = 0; MyThreadData * data = new MyThreadData(); data->bRun = FALSE; data->hEvent = CreateEvent(0,0,0,0); HANDLE hThread = (HANDLE)_beginthreadex( NULL, 0, &WarteAufNachrichten, NULL, data , &threadID ); // Solange kein timeout oder ein anderer Fehler aufgetreten ist while(WaitForSingleObject(data->hEvent,3000) == WAIT_OBJECT_0); InterlockedExchange((LONG volatile*)&data->bRun,FALSE); TerminateThread(hThread,0); CloseHandle(data->hEvent); CloseHandle(hThread); delete data; return 0; }BR
Vinzenz
-
Sorry, das ist zu schwer für mich.
Ich habe folgendes Problem.
Ich habe zwei Buttons in meinem Dialogfeld, Empfangen und Senden.
Wenn ich Empfangen betätige, starte ich meine serielle Abfrage.
(Ich frage über Windowsnachrichten ab (CSerial)).
Während ich empfange wird mein Messwert ja auch immer brav aktualisiert,
aber wenn die Verbindung abreisst,kommt kein Alarm und der Wert ändert sich
logischerweise nicht auf 0. Dies versuche ich zu ändern.Vieleicht gibts eine einfachere Lösung...vieleicht :p
Viele Grüße
Sven
-
ich mach grad was ähnliches...

bau dir ne uhr, merk dir den Zeitpunkt des letzten eintreffens von nem impuls.
zähle weiter, und zieh jeweils letzte gespeicherte uhrzeit von der aktuellen ab (ich muss was ähnliches machen und verwende GetTickCount() weil ich Genauigkeit brauch). und wenn dein wert größer ist als du willst (sek. von mir aus) sagst du in deiner abfragen schleife einfach break;ich hoff du kannst dir was drunter vorstellen wie ich das gemeint hab

-
Ja das ist genau in meine Richtung gedacht

Ich komm leider erst nächste Woche dazu, das umzusetzten.
Vielen dank schon malSven
-
hätte dir nen fetzen code gepostet, aber soweit bin ich selber noch net :p