Thread-Funktion stürzt ab, was mache ich falsch ?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Thread-Funktion stürzt ab, was mache ich falsch ?

Beitrag von dl5ndh »

Hallo liebe PureBASIC User,
ich versuche schon stundenlang verzweifelt, eine Procedure mittels der Thred Funktion aufzurufen.
Jedesmal stürzt das Programm dabei ab, was mache ich falsch ?
Unter Select TT_Z Case 1 versuche ich, die Procedure TT_Transmit_1() aufzurufen, in welcher ich eine
Wave-Datei aufrufen möchte und dann eine Schleife mache. Schon beim CatchSound(1,?TON1) stürzt das
Programm ab... hm (Mist)

Ich poste 'mal meinen Code:

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

UseFLACSoundDecoder()

UseOGGSoundDecoder()

IncludeFile "ELF_Window.pb"


Declare TT_Transmit_1()
Declare TT_Transmit_2(time2.l)
Declare TT_Transmit_3(time3.l)


Procedure TT_Transmit_1()
  Protected Startzeit.l, Endezeit.l, Zwischenzeit.l
  CatchSound(1,?TON1)
  PlaySound(1,#PB_Sound_Loop)
  SoundFrequency(1,44100/82*ValF(GetGadgetText(#String_0)));Die daten aus den Gadgets holen
  ;Die Anfangszeit in Sekunden setzen
  Startzeit = Date()
  Repeat
        Zwischenzeit = Date()-Startzeit
  Until (Zwischenzeit-Startzeit) >= time1
  StopSound(1)
      
EndProcedure

Procedure TT_Transmit_2(time2.l)
EndProcedure

Procedure TT_Transmit_3(time3.l)
EndProcedure





Open_Window_0()

SetGadgetText(#Text_1,"Make Your arrangements")


Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #Button_1: End; Programm beenden OK!!!
      
      
    ;*********** Senden der Testtöne **************  
    ElseIf GadgetID = #Button_3 ;Senden
                ;Wieviel Frequenzen sind gefordert, 1,2 oder 3 Frequenzen ?
                If GetGadgetText(#String_0)=""
                          SetGadgetText(#Text_1,"No frequency is quoted")
                          Goto weiter
                        Else
                          TT_Z=1
                            If GetGadgetText(#String_1)<>""
                              TT_Z = TT_Z+1
                                    If GetGadgetText(#String_2)<>""
                                        TT_Z = TT_Z+1
                                    EndIf
                            EndIf
                          EndIf
                 Select TT_Z
                                Case 1
                                      SetGadgetText(#Text_1,"Test tone transmitting on "+GetGadgetText(#String_0)+" Hz ( wait )")
                                      TT_thread_1.l = CreateThread(@TT_Transmit_1(),Val(GetGadgetText(#String_0)))  ;Die Zeitdauer wird mitgeliefert
                                Case 2:SetGadgetText(#Text_1,"Test tone transmitting on "+GetGadgetText(#String_0)+" Hz, "+GetGadgetText(#String_1)+" Hz ( wait )")
                                      TT_thread_1.l = CreateThread(@TT_Transmit_1(),Val(GetGadgetText(#String_3)))
                                      TT_thread_2.l = CreateThread(@TT_Transmit_2(),Val(GetGadgetText(#String_4)))
                                Case 3:SetGadgetText(#Text_1,"Test tone transmitting on "+GetGadgetText(#String_0)+" Hz, "+GetGadgetText(#String_1)+" Hz, "+GetGadgetText(#String_2)+" Hz ( wait )")
                                      TT_thread_1.l = CreateThread(@TT_Transmit_1(),Val(GetGadgetText(#String_3)))
                                      TT_thread_2.l = CreateThread(@TT_Transmit_2(),Val(GetGadgetText(#String_4)))
                                      TT_thread_3.l = CreateThread(@TT_Transmit_3(),Val(GetGadgetText(#String_2)))
                EndSelect
    weiter:   
      ;********************************************
      
    ElseIf GadgetID = #Button_2
      
    ElseIf GadgetID = #Image_0
      
    ElseIf GadgetID = #ListIcon_0
      
    ElseIf GadgetID = #Button_4
      
    ElseIf GadgetID = #Button_5
      
    ElseIf GadgetID = #Button_6
      
    ElseIf GadgetID = #String_6
      
    ElseIf GadgetID = #Combo_0
      
    ElseIf GadgetID = #Combo_1
      
    ElseIf GadgetID = #Combo_2
      
    ElseIf GadgetID = #Button_7
      
    ElseIf GadgetID = #Button_8
      
    ElseIf GadgetID = #Button_9
      
    ElseIf GadgetID = #Combo_3
      
    ElseIf GadgetID = #Button_10
      
    ElseIf GadgetID = #String_7
      
    ElseIf GadgetID = #ListIcon_1
      
    ElseIf GadgetID = #Button_11
      
    ElseIf GadgetID = #Image_1
      
    ElseIf GadgetID = #String_8
      
    ElseIf GadgetID = #Button_12
      
    ElseIf GadgetID = #Button_13
      
    ElseIf GadgetID = #Button_14
      
    ElseIf GadgetID = #String_9
      
    ElseIf GadgetID = #Combo_4
      
    ElseIf GadgetID = #Combo_5
      
    ElseIf GadgetID = #Image_3
      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;Anhang der Wave-Files
DataSection
TON1: IncludeBinary "TON1.wav"
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Thread-Funktion stürzt ab, was mache ich falsch ?

Beitrag von ts-soft »

So rein flüchtig betrachtet, sehe ich schon mal, das "TT_Transmit_1()" keinen Parameter hat.
Threadprozeduren haben grundsätzlich einen parameter!

Gruß
Thomas

PS: Das Goto ist nich state of the art :mrgreen: , desweiteren möchte ich Dir EnableExplicit nahelegen.
Sound werden sowieso asynchron abgespielt, Threads sind hier vollkommen überflüssig!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Ramihyn_
Beiträge: 61
Registriert: 20.06.2007 10:56

Re: Thread-Funktion stürzt ab, was mache ich falsch ?

Beitrag von Ramihyn_ »

dl5ndh hat geschrieben:Schon beim CatchSound(1,?TON1) stürzt das
Programm ab... hm (Mist)

Ich poste 'mal meinen Code:

Code: Alles auswählen

;Anhang der Wave-Files
DataSection
TON1: IncludeBinary "TON1.wav"
Ich hab grad keine Zeit es genau anzuschauen, aber das fehlende EndDatasection springt als erstes ins Auge. Vielleicht ist das schon der Grund für den Crash bei CatchSound. Ansonsten würde ich mal TON1.wav genau ansehen (44khz, 16bit raw?) - alle "Catch" Funktionen sind mit Vorsicht zu geniessen, probier mal #pb_any bei CatchSound und gib probeweise die exakte Länge der Wave-Datei an um zu sehen ob der Crash bei CatchSound dann weg ist.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Thread-Funktion stürzt ab, was mache ich falsch ?

Beitrag von Max_der_Held »

ich würde einfach aus prinzip einen Mutex in TT_Transmit_1 einfügen.
K.a. ob Catchsound threadfähig ist -> ausprobieren.

Lg
Max
Antworten