timeout thread

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

timeout thread

Beitrag von AUGE_OHR »

hi,

ich brauche etwas um ein "verzögertes hängenbleiben" zu verhindern.

Wenn ich im Mediaplayer eine Mediadatei lade so wird zunächste der
passende Codec geladen. Genau dabei kann es aber passieren das der
Mediaplayer "hängen" bleibt.

Es bringt grundsätzlich nichts wenn ich einen BEGIN SEQUENCE /
RECOVER Konstruktion benutze den der Xbase++ Thread läuft im
Code ja weiter während das activeX ein eigener Thread ist.

Leider hab ich noch nicht raus bekommen ob der Mediaplayer zu dem
Zeitpunkt irgendeine ErrorMsg absetzt die ich auswerten kann, also
denke ich über eine andere Lösung nach.


z.Z. versuche ich mich mit sowas, aber es scheint (noch) nicht das
richtige timeing zu sein ...

Code: Alles auswählen

::oThread := Thread():new()
::oThread:setStartTime(SECONDS()+6)
::oThread:start( "LogOut",1)

DO WHILE nAgain < 3

      // some WMP Property
      //
      ::oWMP:stretchToFit       := .T. // fit video into Dialog. NEED resize !
      ::oWMP:Settings:AutoStart := .T. // start to play after load

      // now we load media via :URL
      // depending what Codec is need
      // it will invoke WMP Event :
      // wmppsTransitioning
      //
* BEGIN SEQUENCE

      ::oWMP:URL  := cFile                      // play via :URL

* RECOVER

      // "resize" parent to same size
      //
      ::oWMP:setparent():setPosAndSize( aPosi  ,{aSize[1],aSize[2]} )

      // reset fail counter
      //
      ::failcount := 0
      DO WHILE .T.

         // is playing ?
         //
         IF ::oWMP:PlayState = wmppsPlaying
            //
            // is Media open ?
            IF ::oWMP:openState = wmposMediaOpen
               //
               // ok now we can exit loop
               EXIT
            ENDIF
         ENDIF
         SLEEP(10)
         ::failcount++
         IF ::failcount > 10*5
            //
            // 1st stop it
            ::oWMP:Controls:stop()
            RETURN .F.
         ENDIF
      ENDDO
      //
      // "resize" player to same ::drawingArea size
      //
      ::oWMP:setPosAndSize({0,0}, ::drawingArea:currentsize() )
      SLEEP(10)

      IF ::oWMP:currentpos()[1] = 0 .AND. ::oWMP:currentpos()[2] = 0
         ::oWMP:Controls:pause()
         EXIT
      ELSE
         //
         // some Error on open Media, try again
         //
         ::oWMP:Controls:stop()
         nAgain++
      ENDIF
ENDDO
IF ::oThread = NIL
ELSE
   ::oThread:setInterval( NIL )
   ::oThread := NIL
ENDIF
jemand noch eine Idee wie man den "hänger" sonst noch abfangen könnte ?

gruss by OHR
Jimmy
Antworten