Einzelnen Beitrag anzeigen

kng

Registriert seit: 6. Feb 2008
25 Beiträge
 
#1

Threads, TStringlist und CriticalSection

  Alt 18. Apr 2008, 00:33
Moin,

Ich habe ein Programm, das mehrere Threads startet, die auf eine globale TstringList zugreifen.
(Es wird nur gelesen, nicht gelöscht, eingefügt oder geschrieben.)
Funktioniert auch ganz gut.

Hier ein Beispiel, wie es bei mir ungefähr aussieht:
Delphi-Quellcode:
var list:tstringlist;

procedure mythread;
var i:integer; s:string;
begin
for i:=0 to pred(list.count) do
begin
  s:=list[i];
  //"s" verarbeiten
end;
end;

procedure startthreads;
var i:integer; c:cardinal;
begin
for i:=1 to 20 do
  beginthread(nil,0,@mythread,nil,0,c);
end;
"list" enthält ~ 20000 Einträge.
Dann habe ich gehört, dass ich ich die komplette For-Schleife in eine CriticalSection schreiben muss.

Ist das wirklich nötig?
Es funktioniert ja auch ohne... und würde den Vorgang doch eig. nur unnötig verlangsamen oder?

Oder können ohne CriticalSection sonst noch andere Probleme auftreten?
  Mit Zitat antworten Zitat