Seite 1 von 1

Problem mit Prozedur (Thread)

Verfasst: 11.08.2005 12:43
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

Verfasst: 11.08.2005 12:48
von freedimension
Hast du evtl. vergessen die Datei wieder zu schließen?

Verfasst: 11.08.2005 12:55
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

Verfasst: 11.08.2005 16:06
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

Verfasst: 11.08.2005 16:12
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

Verfasst: 11.08.2005 19:42
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