[c++] Message Queue > einzelne Nachrichten löschen

14/10/2013 - 11:23 von Heinz-Mario Frühbeis | Report spam
Hallo,

da ich ja wohl an der Message Queue nicht drum herum komme, habe ich
mich heute mal dran gesetzt.
Das klappt auch alles ganz super, aber...

Sehe ich das richtig, daß alle Nachrichten, auch wenn sie empfangen
wurden, in der Queue drin bleiben bis die ganze Queue gelöscht wurde?
Oder gibt es die Möglichkeit eine empfangene Nachricht aus der Queue zu
entfernen?

Vorab mit Dank
H-MF
 

Lesen sie die antworten

#1 Heinz-Mario Frühbeis
14/10/2013 - 12:44 | Warnen spam
Am 14.10.2013 11:23, schrieb Heinz-Mario Frühbeis:
Hallo,

da ich ja wohl an der Message Queue nicht drum herum komme, habe ich
mich heute mal dran gesetzt.
Das klappt auch alles ganz super, aber...

Sehe ich das richtig, daß alle Nachrichten, auch wenn sie empfangen
wurden, in der Queue drin bleiben bis die ganze Queue gelöscht wurde?
Oder gibt es die Möglichkeit eine empfangene Nachricht aus der Queue zu
entfernen?

Vorab mit Dank
H-MF



Vllt "Kommando zurück"...

Ich habe hier in einem Thread eine while-Schleife, die làuft bis ein
bestimmter Wert eintrifft

while(nRecieve == 1){
nRetVal = msgrcv(nRetVal, &dataMsg, defMsgSize, 0, 0);
switch(dataMsg.MsgType){
case 1:
Std_CoutA("THREAD END A", nMsgQ_Key, dataMsg.MsgType);
dataMsg.MsgType = -1; // <-- [1]
nRecieve = 0;
break;
case 2:
Std_CoutA("THREAD END B", nMsgQ_Key, nIDAEx->GetState());
dataMsg.MsgType = -1; // <-- [1]
break;
default:
break;
}
}

(Std_Cout ist eine eigene Funktion für eine Ausgabe mit std::cout)

[1] habe ich gerade beigefügt, ohne [1] rauscht std::cout nur so durch.

Aber eigentlich dachte ich, daß msgrcv() so lange blockt bis eine
Nachricht reinkommt. Jedenfalls, wenn ich bei "default:" auch Std_CoutA
aufrufe, dann wird bestàndig ausgegeben. Was wohl daran liegt, daß immer
noch eine erste Nachricht in der Queue vorhanden ist (in diesem Fall
wàre es für "case 2:"), wobei ich eben davon ausging, daß wenn msgrcv()
erfolgreich war, daß die Nachricht aus der Queue entfernt wird.

Vllt habt ihr ja noch was aufschlussreiches dazu.
Im Internet fand ich bisher immer nur "die gesamte Queue löschen"...

Vorab mit Dank
H-MF

Ähnliche fragen