Aktuelle Zeit: 19.05.2013 06:46

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Thread-Funktion stürzt ab, was mache ich falsch ?
BeitragVerfasst: 07.12.2011 23:19 
Offline
Benutzeravatar

Registriert: 13.05.2008 19:55
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:
; 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"


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Thread-Funktion stürzt ab, was mache ich falsch ?
BeitragVerfasst: 07.12.2011 23:35 
Offline
CodeCommander
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
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.11 | Windows 7 SP1 (x64) | Linux Mint 14 (x64) | RealSource
Bild
Der CodeCommander, der seine Finger sowohl von Windows 8, wie auch dem Monitor lässt!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Thread-Funktion stürzt ab, was mache ich falsch ?
BeitragVerfasst: 07.12.2011 23:59 
Offline

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

Ich poste 'mal meinen Code:

Code:
;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.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Thread-Funktion stürzt ab, was mache ich falsch ?
BeitragVerfasst: 20.02.2012 17:52 
Offline
Benutzeravatar

Registriert: 18.04.2006 17:01
Wohnort: Bavaria
ich würde einfach aus prinzip einen Mutex in TT_Transmit_1 einfügen.
K.a. ob Catchsound threadfähig ist -> ausprobieren.

Lg
Max

_________________
Cartesy GmbH


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye