Home des SQED32

Press to see this page in english

SQED32

Die für den Thread 1 geltende maximale Laufzeit von 1/10s schließt alle im Zuge der Bearbeitung gesendeten Messages ein! Länger dauernde Aktionen sind deshalb zur Bearbeitung einem anderen Thread zuzustellen. Dafür bieten sich viele unterschiedliche Wege. Der richtige läßt sich nur durch die konkrete Applikation bestimmen: MinPostMsg() wenn der empfangende Thread sowieso schon eine eigene Messagequeue hat Queue in Verbindung mit Eventsemaphore wenn man genormte Telegramme generieren kann. Pipe in Verbindung mit Eventsemaphore wenn Queues nicht oder nur umständlich einsetzbar sind, also der Datenaustausch nicht auf ein festes Format festlegbar ist WinSendMsg() ist für diese Verteilung niemals geeignet, da durch das Senden ja die Bearbeitung der Message angehalten wird, bis die gesendete zurückkehrt. Das Posten von Messages an den selben Thread, um die 1/10s- Regel einzuhalten ist in der Regel wenig sinnvoll, da die Bearbeitung zwischenzeitlich eintreffender Systemmessages gebremst wird.

Der von WinSendMsg() zurückgegebene Wert ist der Returnwert der Message. Es ist niemals ein Fehler, diesen Wert auch zu überprüfen und ggf. entsprechend zu reagieren. Eine mit WinPostMsg() losgelassene Message kehrt sofort zurück und liefert kein Ergebnis, außer, das das posten (nicht) geklappt hat. wird parallel zur laufenden Bearbeitung ausgeführt, wenn der Empfänger in einem anderen Thread läuft Der postende Thread benötigt keine Messagequeue, wohl aber der Empfänger. WinPostMessage meldet im Returnwert, ob die Zustellung geklappt hat. Wer auf saubere Ausführung Wert legt, kontrolliert, ob das Posten geklappt hat. Eine Aussage, ob die Message selbst (fehlerfrei) ausgeführt werden kann ist damit allerdings nicht verbunden. Eine Auswertung dieses Wertes ist niemals ein Fehler, kann bei entsprechender Codierung sogar verhindern, daß Messages niemals ausgeführt werden.

ACHTUNG: werden Pointer auf automatic Variable mitgepostet, ist ein undefiniertes Verhalten des Programms/Systems garantiert, da die Message erst zur Bearbeitung gelangt, wenn die Variable(n) auf die der Pointer zeigt schon längst ungültig sind oder sein können.