1. Im Gegensatz zur Angabe in der Hilfe gehen Sprites auch in Threads. Dabei ist egal, wo das InitSprite steht, ob im Hauptprogramm oder im Thread.
2. Leider geht trotzdem ohne OpenGL nur ein Screen. Mit OpenGL wird ein zweiter Screen geöffnet, die Ausgabe ist aber kryptisch, könnte auch am falschen OpenGL-Treiber liegen.
3. InitMovie geht nur, wenn es im ersten aufgerufenen Thread steht, dann aber bei beiden Threads. Steht InitMovie im Hauptprogramm, geht in den Threads kein PlayMovie, wird zwar geladen, aber dann als nicht existent gemeldet.
Code: Alles auswählen
UseJPEGImageDecoder()
Procedure Video1(xo)
  If InitSprite() <> 0
    Debug "Sprite init"
  EndIf
  If InitMovie() <> 0
    Debug "Movie init"
  EndIf
  
  If OpenWindow(1, xo, 50, 340, 340, "Video 1", #PB_Window_BorderLess)
    If OpenWindowedScreen(WindowID(1), 10, 10, 320, 320, 0, 0, 0)
      LoadSprite(0, "bild.jpg")
    EndIf
    
      If LoadMovie(1, "sound.mp3") <> 0
        Debug "Movie geladen"
        If IsMovie(1)
          PlayMovie(1, WindowID(1))  ;Abspielen starten
        Else
          Debug "Kein Movie"
        EndIf
      EndIf
  EndIf
  direction = 1
  Repeat
    Repeat
      Event1 = WindowEvent()
    Until Event1 = 0
    
    ClearScreen(RGB(0,0,0))
    ClipSprite(0, 0, 0, x, x)
    DisplaySprite(0, x, 100)
    DisplaySprite(0, x, x)
    DisplaySprite(0, 300-x, x)
  
    x + direction
    If x > 300 : direction = -1 : EndIf   ; moving back to the left with negative value
    If x < 0   : direction =  1 : EndIf   ; moving to the right with positive value
      
    FlipBuffers()       ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back 
    Delay(10)
  Until Quit1
EndProcedure
Procedure Video2(xo)
  If OpenWindow(2, xo, 50, 340, 340, "Video 2", #PB_Window_BorderLess)
    If LoadMovie(2, "sound.mp3") <> 0
      Debug "Movie geladen"
      If IsMovie(2)
        PlayMovie(2, WindowID(2))  ;Abspielen starten
      Else
        Debug "Kein Movie"
      EndIf
    EndIf
  EndIf
  direction = 1
  Repeat
    Repeat
      Event2 = WindowEvent()
    Until Event2 = 0 ; Quit the event loop only when no more events are available
    
    Delay(10)
    
  Until Quit2
EndProcedure
CallDebugger
  If OpenWindow(0, 50, 50, 340, 400, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
    ButtonGadget(1, 10,  10, 100, 25, "Grab input")
    ButtonGadget(2, 120,  10, 100, 25, "Button 2")
    ButtonGadget(3, 230,  10, 100, 25, "Button 3")
    TextGadget  (4, 10, 40, 300, 30, "Press 'F1' to ungrab keyboard and mouse")
  EndIf
  
td1 = CreateThread(@Video1(), 400)
Delay(2000)
td2 = CreateThread(@Video2(), 750)
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        Quit = 1
    EndSelect 
     
  Until Quit
KillThread(td1)
KillThread(td2)
End1. Warum muss InitMovie im Thread stehen, bei InitScreen ist es egal?
2. Gibt es eine Chance, dass jeder Thread einen WindowedScreen öffnen und darin Sprites anzeigen kann?
3. Andere Idee, wie ich von einem Programm aus zwei Screens mit Bildern versorgen kann? Soll für eine Steuerung von zwei Beamern sein, mit unterschiedlichen Inhalten.
Achso, "Threadsichere Exe" ist aktiviert.




 davon hast du aber auch keinen mucks gesagt.
 davon hast du aber auch keinen mucks gesagt.