Einzelnen Beitrag anzeigen

Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#9

Re: threads - Parallele Bewegungen von Objecten in einem Ima

  Alt 4. Apr 2007, 16:05
Zitat:
Hi,
Du solltest auf gar keinen Fall VCL-Komponenten aus einem Thread heraus verändern. Da kommt nicht Dein Fehler her, die sind aber (wie bereits von DGL-Luke gesagt) nicht Threadsafe. Das heißt, mit etwas Pech verändern zwei Threads gleichzeitig Dein Bild und Du bekommst irgendwas zu sehen (nur nicht das was Du willst).

Den Fehler würde ich mal in Deiner globalen Variable a vermuten. Da es sich hier um eine globale Variable (und unsynchronisierte Threads) handelt, kann es dazu kommen, dass Du hier a in einem Thread frei gibst, während ein anderer danach a.bewege aufrufen möchte, was natürlich nicht funtkionieren kann.
An sich solltest Du aber ruhig auf TThread zurückgreifen, leistet das gleiche wie dein beginThread, kümmert sich aber auch um das saubere Beenden (und macht die Synchronisation leichter).

Gruß Der Unwissende
Danker erstmal für deine Antwort.
Das mit meiner Globalen Variable habe ich auch schon bemerkt, und das ganze mal abgeändert.

Delphi-Quellcode:
procedure machwas(x);
begin
   //Create ist hier nicht mehr erforderlich oder?
   x.bewege;
   freeAndNil(x);
end;

procedure form1.button1click(Sender:Tobject);
var hthread:Thandle;
    ThreadID:Cardinal;
begin
  hthread:=beginthread(nil,0,@machwas(x),nil,0,ThreadID);
end;
soweit so gut.
nur das ich bei beginthread keine proceduren mit Paramtern übergeben kann.

wie meinst du das mit TTHread?

könntest du das ganze vllt mal näher erläutern?
habe das erste mal mit Threads zu tun und demnach auch keine Ahnung
  Mit Zitat antworten Zitat