Thema: Delphi Mal wieder Threads....

Einzelnen Beitrag anzeigen

DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#1

Mal wieder Threads....

  Alt 29. Jan 2010, 13:24
Hi,

ich suche seit heute morgen ein vernünftiges beispiel wie man "sauber" threads erstellt. Und zwar läuft es bei folgendermasen ab....

Ich habe eine sub. Die kennt ein Array z.b. so..
Delphi-Quellcode:
type
  TMyThread = record
   InUse :Boolean;
   FormHandle :THandle;
   Text :String;
   ..... usw.
end;
var
   MyThread :Array[0..20] of TMyThread;
Beim start des programms setze ich alle InUse auf false. Wenn ich einen Thread starten möchte, durchsuche ich MyThread ob ein InUse=False ist. Wenn ja dann setze ich es sofort auf True und übergebe den Index an meinen Thread.

Der Thread hohlt sich dann die nummer und hat damit ja zugriff auf den Text der ihm gehört. Beim beenden des Threads, also als letzte zeile setzte ich MyThread[Index].InUse:=False; damit er wieder frei ist.

Das hier ist ja nur ein beispiel. Es wird natürlich wesentlich mehr in dem Thread gemacht. Aber das ist ja erstmal egal für ein kleines beispiel.

Delphi-Quellcode:
function GeloesterThread(varptr: Pointer): LongInt; stdcall;
var
  i :Integer;
begin
  i:=integer(varptr^);
  //in i steht dann der index
  MyThread[i].InUse:=False;
end;
So starte ich den

Delphi-Quellcode:
ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@GeloesterThread),@index, 0, id);
if ThreadHandle<>0 then CloseHandle(ThreadHandle);
Es klappt auch soweit. Aber es scheppert doch relativ oft. Und ich kann leider nicht nachvollziehen wie, wo und warum.

Nun habe ich gelesen man muss das mit TThread / BeginThread machen. Aber ich finde kein einfaches beispiel was auf meine sache zutrifft.

Wär super wenn mir einer helfen könnte. Ich komme einfach nichtmehr weiter. Es ist auch sehr sehr frustrierend wenn man stundenlang sucht und nix "richtiges" findet. Am geilsten wäre natürlich ein "richtiges" beispiel.

Vielen dank im voraus
  Mit Zitat antworten Zitat