Seite 1 von 1

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

Verfasst: 07.12.2011 23:19
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"

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

Verfasst: 07.12.2011 23:35
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!

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

Verfasst: 07.12.2011 23:59
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.

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

Verfasst: 20.02.2012 17:52
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