Cardinalsfehler ???? erzähle mir mehr darüber...
-> mit einem ADD button wird ein Tab,2 Buttons und nen StringGrid erstellt.
Dieses StringGrid = box.
Delphi-Quellcode:
//wenn array nur 1 Row dann bestehende SG nutzen ->
//ansonsten -> neues StringGrid erstellen
if ( length(Sar) = 1 ) then
begin
n_SG := Form2.JvStringGrid1;
end;
if ( length(Sar) > 1 ) then
begin
n_SG := TJvStringGrid.Create( form2 );
n_SG.Parent := TTabSheet( Tab );
n_SG.Name := sg_navn;
copy_option_JvStringGrid( form2.JvStringGrid1 , n_SG );
end;
//OnDrawCell auf neue SG setzen
n_SG.OnDrawCell := Form2.JvStringGrid1DrawCell;
function read_ALL_data( path :string; box:TJvStringGrid ):string;
wird später wieder zur Procedure gemacht.
aber mal eine ganz andere Frage: du willst von 12(!) Dateien die Größe,....
nee, es sollen alle Dateien mit Unterordner eingelesen werden.
Also ist die Idee, die erste Struktur in eine Stringlist zu packen, dann aufzuteilen (hier / 12 oder wenn X < 12 dann = X).
Sind es 24 ordner dann bekommt jeder Thread 2 Ordner die er mit Unterordner auslesen soll.
Jeder Thread hat eine eigene ErgebnisStringList die nach Ablauf aller Threats zusammengeführt, sortiert und in das Stringgrid gepackt wird.
Das Auslesen der Dateinamen geht wirklich deutlich schneller, jedoch mit zusätzlichen Daten (und dort bin ich gerade)ist gerade dieses futsch...
Cardinalsfehler :
Nu komm ich als erstes aud die IDEE die ErgebnisListe weiter zu nehmen, in nen Array zu packen, dort zu befüllen und anschliessend in die box zu übertragen?
---- So hab n Array gebastelt ----
grösse wie das StringGrid, inhalt ( kompletter dateipfad und name, indexnummer, threadaufteilung [0..11] )
also ProbeArray[ indI3, 2 ] := tempS1; //dateigrösse
--> erster Versuch , tempTHI ist wieder von 10 auf 12 gesprungen.
bei der Loganzeige stand (THI = 12 / tempTHI = 1) ( THI = 12 / tempTHI = 2) ( THI = 12 / tempTHI = 3 ) ... usw.
hab danach das delay zwischen den tasks.start auf 600ms gesetzt.
ergebnis -> jeder Thread inklusive 11 startet mit dem richtigen Integer. Ein Problem gelöst
--> neues Problem Thread hängt sich bei Dateinamen wie (Image1 - Kopie.jpg) auf
Uups, Cardinalsfehler: Ich nehme mal an, dass box ein
VCL Element ist?
Wenn ja muss natürlich der Zugriff auf das box Element im Synchronize stattfinden:
Delphi-Quellcode:
TThread.Synchronize(nil,procedure ()
begin
box.Cells[2,indI] := tempS1; //dateigrösse
box.Cells[3,indI] := tempS2; //erstellt
box.Cells[4,indI] := tempS3; //letzter zugriff
box.Cells[5,indI] := tempS4; //geändert
end);
aber mal eine ganz andere Frage: du willst von 12(!) Dateien die Größe, und die anderen Metadaten ermitteln. Brauchst du dafür wirklich 12 Threads? Kannst du das nicht entweder im Hauptthread oder zumindest in einem einzelnen Thread abfackel? Für mich klingt das ein wenig nach "mit Kanonen auf Spatzen schießen"