Einzelnen Beitrag anzeigen

seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#1

Variable an Thread übergeben

  Alt 19. Mai 2004, 15:40
Hallo,

Ichbin dabei ein Programm zu schreiben, das die Festplatten des Computers nach mp3 Dateien durchsucht, die mp3tags ausliest und dann die Möglichkeit bietet eine Playlist zu erstellen. Zuerst durchsuche ich die Festplatte nach allen mp3 Dateien und schreib den kompletten Pfad zu jeder Datei in eine txt-Datei. Damit das auslesen der mp3-tags etwas schneller geht bei vielen mp3 Dateien möchte ich das gerne mit 20 gleichzeitigen Threads machen. Jetzt hab ich das problem das die Übergabe der Pfadnamen an die Threadprozedur nicht richtig klappt:

Code:
While not eof(f) do
 begin
   readln(f, einlesen2); // aus der Textdatei den Pfad zur mp3 einlesen
   // Wenn mehr als 20 Threads, warten bis ein Thread frei wird.
   While mp3threadcounter > 20 do application.ProcessMessages;
   // Threadcounter um eins erhöhen, beim verlassen des Threads wird eins abgezogen
   inc(mp3threadcounter);
   //Thread starten, String-Variable einlesen2 übergeben.
   BeginThread(nil, 0, TFNThreadStartRoutine(@Tmp3Thread.mp3Thread),@einlesen2, 0, ThreadID);
end;
Das ist der Aufruf des Threads und hier ist der Beginn des Threads:

Code:
 
procedure Tmp3thread.mp3thread(Filename: Pointer);
var Inhalt, Fname: String;
    Stream1: tfilestream;
    einlesen: Char;

begin
// Type TCriticalSection, wurde zum Programmstart schon initialisiert
kritischerabschnitt.enter;
// In Filename steht nicht das was ich übergeben haben sondern nur Müll zb: //&%//%$%$%$)==?=?
Fname := String(Filename^);
// Obwohl in String(Filename^) etwas drinsteht ist Fname nach der Zuweisung leer ('')
kritischerabschnitt.Leave;
//Programm springt zum Ende der Threadprocedur (weil die Datei /&/&$%/()&() natürlich nicht existiert) und bricht
// mit Fehlermeldung Write of Adress irgendwas ab.
if fileexists (Fname) then
  begin
Die Variable die an die Thread-Procedur übergeben werden soll kommt nicht an, sondern nur Müll (zb: ()$%&(§$&%/§/&)$%&/()&/()$%) obowhl in dem Pointer was drin steht ist FName nach der Zuweisung leer und das programm bricht mit der Fehlermeldung Write of Adress irgendwas ab. hat jemand eine Ahnung was ich falsch mache?

Danke & LG Seddto
  Mit Zitat antworten Zitat