Funktion dauerhaft überprüfen.
-
Hi @all,
folgendes Prob:
Mein Programm führt einen Stream aus. Es sendet in einer Tour zu einem Media Server. In meiner Funktion Control() möchte ich feststellen, ob der Stream unterbrochen wurde.
void CHauptDlg::Control() { hr = 0; do { if ( SUCCEEDED( hr ) ) { hr = pEncoder->PrepareToEncode(VARIANT_TRUE); } }while(hr == 0); ShowWindow(SW_SHOW); // Stream stoppen OnStop(); }Bei der Ausführung bleibt es in der while-Schleife hängen, also wird PrepareToEncode falsch sein. Weiß irgendwer, mit welcher Funktion des Encoders man feststellen kann, ob ein Stream noch gesendet wird?
-
Habe meine Funktion mal etwas umschrieben. Es soll noch immer geprüft werden ob der gestartete Stream zum Windows Media Server noch läuft.
void CHauptDlg::Control() { hr = 0; WMENC_ENCODER_STATE enumEncoderState; do { // Prüfen ob Encoder noch sendet Sleep(1000); if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_RunState(&enumEncoderState); } }while(enumEncoderState == WMENC_ENCODER_RUNNING); ShowWindow(SW_RESTORE); // Stream stoppen OnStop(); }Zur Erklärung: die Funktion get_Runstate(&enumEncoderState) gibt hr den Wert 0.
Soll heißen, alles in Ordnung. In enumEncoderState steht entweder WMENC_ENCODER_RUNNING (also Stream läuft) oder WMENC_ENCODER_STOP (Stream läuft nicht). Das ganze wird in der do-while-Schleife 1 mal die Sekunde abgefragt.
Sobald das Programm in diese Funktion reingeht, reagiert es nicht mehr. Kann es daran liegen, das er aus der while-Schleife nicht rauskommt? Aber das soll das Programm ja eigentlich auch nicht. Das soll nur passieren, wenn der Stream beendet wird.
Wie prüft man so eine Funktion?

Brauche dringend hilfe!
-
Zusatz:
Ich will mich übrigens nicht auf diese Funktion festlegen. Wenn jemand weiß, wie man sonst prüfen kann, ob ein stream über die Netzwerkkarte gesendet wird, immer her damit. :p