B3D crasht mit Thread

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Toasty

Betreff: B3D crasht mit Thread

BeitragDo, Dez 09, 2010 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich hab ein Problem mit Threads. Wenn ich das Programm starte, funktioniert es erst, aber nach ca. einer Sekunde stürzt der Compiler ab.
BlitzBasic: [AUSKLAPPEN]
Function Thread_LoadData(var%=0)
Local FirstCall=True,ms=MilliSecs()+1000,count
Repeat
count=count+1

If FirstCall=True Then
Print"LOADING APPDATA"

t=ReadFile("sinf/APPLICATION.toast")
If t<>0 Then
End
Else
Repeat
If Eof(t) Then Exit
raw$=ReadLine(t)

p1=Instr(raw$,"{")
p2=Instr(raw$,";",p1)
p3=Instr(raw$,";",p2)
p4=Instr(raw$,";",p3)
p5=Instr(raw$,"}",p4)

t_name$=Mid(raw$,p1+1,p2-p1-1)
t_addr$=Mid(raw$,p2+1,p3-p2-1)
t_arun=Mid(raw$,p3+1,p4-p3-1)
t_access$=Mid(raw$,p4+1,p5-p4-1)

app.Tapp=New Tapp
app\Name$=t_name$
app\Addr$=t_addr$
app\ARun=t_arun
app\Access$=t_access$

Print"APP "+Chr(34)+app\Name$+Chr(34)+" ADDED"
Forever
CloseFile(t)
TMP_LoadState=True
EndIf
FirstCall=False
EndIf

If MilliSecs()>ms Then
TMP_ThreadFPS=count
count=0
ms=MilliSecs()+1000
EndIf
Forever
End Function


Ich hoffe mir kann jemand helfen Sad bin echt planlos...

Gruß Toasty
@AMD Phenom BE X4 2,5Ghz(Overclocked 2,61Ghz); 4GB DDR2; 512MB nVidia GeForce 8400gs; Win7 Home Premium 64bit
Lua for President!

Xeres

Moderator

BeitragDo, Dez 09, 2010 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Das könnte damit zu tun haben, dass B3D nicht mit Threads umgehen kann...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Toasty

BeitragDo, Dez 09, 2010 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber laut Pummelie (müsste das gehen...

Hab es in etwa so gemacht wie es in dem Tutorial war, auch das Beispiel(das funktioniert hat) ausprobiert, aber funktioniert nicht...
@AMD Phenom BE X4 2,5Ghz(Overclocked 2,61Ghz); 4GB DDR2; 512MB nVidia GeForce 8400gs; Win7 Home Premium 64bit
Lua for President!

Xeres

Moderator

BeitragDo, Dez 09, 2010 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du nicht, es wäre von gewisser Wichtigkeit gewesen, was für Libs/DLLs/Hacks du verwendest? Rolling Eyes
Für "Beginner" kein geeignetes Material - viel Glück trotzdem.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Freak123

BeitragFr, Dez 10, 2010 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht ligt es daran:
BlitzBasic: [AUSKLAPPEN]

t=ReadFile("sinf/APPLICATION.toast")
If t<>0 Then
End
Else


Zu:
BlitzBasic: [AUSKLAPPEN]

t=ReadFile("sinf/APPLICATION.toast")
If t=0 Then
End
Else


Erklärung wieso: Wenn eine Datei da ist( ReadFile() gibt einen Wert ungleich 0 zurück ), soll weitergemacht werden

Ich hoffe das ist es

Pummelie

BeitragFr, Dez 10, 2010 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
So, da das hier ja anscheinend ein bisschen auf meinem Mist gewachsen ist, melde ich mich mal zu Wort Wink

Print sollte man nicht im Thread ausführen, du kannst dir da mit Types eine etwas komische Sache bauen...

Es kann auch passieren (ich kenn ja nicht deine Mainfunktion), das du während du neue Typeinträge erstellst und da rein schreibst, im Hauptprogramm darauf zugreifst...
Das führt ebenfalls zum Absturtz.

Hier mal ein Code, der das Print problem löst, und dir das locken veranschaulicht.

BlitzBasic: [AUSKLAPPEN]

Global lock[1]
Type TPrints
Field msg$
End Type
;--Grafik Zeug laden--
;--Thread Zeug--

Repeat
If lock[0]=1 Then lock[0]=2
If lock[0]<>2 Then
Local tget.TPrints=First TPrints
For tget.TPrints=Each TPrints
Print(tget\msg$)
Next
Delete Each TPrints
EndIf
;--Wenn lock den Wert 1 hat, dann wartet der Thread, bis das Mainprog
;--bestätigt, das es keinen Zugriff darauf macht (indem es den Wert 2 zuweißt)
;--Wenn der Thread fertig ist, setzt er lock wieder auf 0

;--Das kann man für alle Typ bzw. Variablenzugriffe machen
Forever





Function Thread_LoadData(var%=0)
Local FirstCall=True,ms=MilliSecs()+1000,count,add.TPrints
Repeat
count=count+1

If FirstCall=True Then
lock[0]=1
Repeat
Until lock[0]=2
add.TPrints=New TPrints
add\msg$="LOADING APPDATA"
lock[0]=0
t=ReadFile("sinf/APPLICATION.toast")
If t<>0 Then
End
Else
Repeat
If Eof(t) Then Exit
raw$=ReadLine(t)

p1=Instr(raw$,"{")
p2=Instr(raw$,";",p1)
p3=Instr(raw$,";",p2)
p4=Instr(raw$,";",p3)
p5=Instr(raw$,"}",p4)

t_name$=Mid(raw$,p1+1,p2-p1-1)
t_addr$=Mid(raw$,p2+1,p3-p2-1)
t_arun=Mid(raw$,p3+1,p4-p3-1)
t_access$=Mid(raw$,p4+1,p5-p4-1)

app.Tapp=New Tapp
app\Name$=t_name$
app\Addr$=t_addr$
app\ARun=t_arun
app\Access$=t_access$
lock[0]=1
Repeat
Until lock[0]=2
add.TPrints=New TPrints
add\msg$="APP "+Chr(34)+app\Name$+Chr(34)+" ADDED"
lock[0]=0
Forever
CloseFile(t)
TMP_LoadState=True
EndIf
FirstCall=False
EndIf

If MilliSecs()>ms Then
TMP_ThreadFPS=count
count=0
ms=MilliSecs()+1000
EndIf
Forever
End Function


PS: Neuster Compiler für Fehlerfreies Laufen notwendig Very Happy
It's done when it's done.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group