Problem mit Prozedur (Thread)

Anfängerfragen zum Programmieren mit PureBasic.
Stonedar
Beiträge: 18
Registriert: 20.05.2005 13:39

Problem mit Prozedur (Thread)

Beitrag von Stonedar »

Hi Leute!

Ich habe mal eine Frage zu einem Teil meines Programmes:

Ich habe eine Prozedur(in einer include Datei) die ich als Thread aufrufe.
Dieser übergebe ich diese Struktur:

Code: Alles auswählen

uebergabe(0)\mem_Md5 = @ArrayA()
uebergabe(0)\mem_Dics = @ArrayB()
uebergabe(0)\laenge_A = ArrayALaende
uebergabe(0)\laenge_B = ArrayBLaenge
In der Prozedure lese ich die so aus:

Code: Alles auswählen

Dim tmpArrayA.s(*tmp\laenge_A)
CopyMemory(*tmp\ArrayA, tmpArrayA(), *tmp\laenge_A*4)
  
Dim tmpArrayB.s(*tmp\laenge_B)
CopyMemory(*tmp\ArrayB, tmpArrayB(),*tmp\laenge_B*4)
So, wenn ich die Prozedure einmal aufrufe, funktioniert es wunderbar.
Wenn ich aber nun direkt danach diese Prozedure nochmal aufrufe, kommt ein Fehler.

Und zwar lese ich aus ArrayA Dateinamen ein, und öffne diese mit Openfile.
Funktioniert auch wunderbar beim ersten ausführen der Prozedur, doch beim zweitenmal, sagt er mit "No current File!"

Hat jemand eine Ahnung woran das liegen könnte?

Gruß,
Stonedar
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Hast du evtl. vergessen die Datei wieder zu schließen?
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Stonedar
Beiträge: 18
Registriert: 20.05.2005 13:39

Beitrag von Stonedar »

Dachte ich auch zuerst, aber dies ist nicht der fall...

Habe gerade noch was entdeckt, und zwar ist es so, dass ArrayA eine Liste ist.
Wenn ich vorher die Liste nach doppelten Einträgen untersuche, und lösche, kann ich die oben genannte Prozedur zweimal hintereinander ausführen, ohne das der Fehler kommt.
Beim dritten mal stürzt das Programm dann aber einfach ab...Hilft diese Information?

Gruß,
Stonedar
Stonedar
Beiträge: 18
Registriert: 20.05.2005 13:39

Beitrag von Stonedar »

So ich hab den Fehler nun mal eingeschränkt...

Ich habe die Prozedure mal probeweise in die Hauptschleife des Progs gepackt, und wenn ich sie von dort ausführe, geht alles ohne Probleme.
Jedoch will ich dir Prozedure ja als Thread starten.

Also muss irgendein Fehler bei der Thread verwaltung sein. (Zeiger werden immer korrekt übergeben)

Oder kann es sein, dass ich bei dem schon oben gepostetn Code, den Speicher vorm beenden des Threads wieder freigeben muss?
Und wenn ja, wie?
Ich hoffe ihr könnt mir helfen...

Gruß,
Stonedar
Stonedar
Beiträge: 18
Registriert: 20.05.2005 13:39

Beitrag von Stonedar »

So, desweiteren muss es an diesem Code liegen:

Code: Alles auswählen

Dim tmpArrayA.s(*tmp\laenge_A)
CopyMemory(*tmp\ArrayA, tmpArrayA(), *tmp\laenge_A*4)
 
Dim tmpArrayB.s(*tmp\laenge_B)
CopyMemory(*tmp\ArrayB, tmpArrayB(),*tmp\laenge_B*4) 
bzw. an dieser Speicherzuweisung.
Denn ich habe mal probeweise zwei Arrays angelegt (in der Prozedur) und gefüllt, und die Prozedure mit diesen Arrays, anstatt mit denen vom Code oben ausgeführt. Mit diesen Probearrays hats geklappt.

Liegt es vielleicht wirklich an der Speicherzuweisung?

Gruß,
Stonedar
Stonedar
Beiträge: 18
Registriert: 20.05.2005 13:39

Beitrag von Stonedar »

Da mit da jetzt keiner bei diesem speziellem Fall helfen kann, frage ich jetzt mal anders:

Gibt es eine andere möglichkeit die zwei Arrays dem Thread zuübergeben?
(muss dem thread zwei Arrays und zwei Variablen übergeben)
Wie macht ihr sowas?

Gruß,
Stonedar
Antworten