Clercq
Messages postés19Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention14 juin 2006
-
8 juin 2006 à 12:00
Clercq
Messages postés19Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention14 juin 2006
-
8 juin 2006 à 17:35
Bonjour,
Voila, mon probleme c'est qu'après lancement de ma thread et bien .... elle d'arrete à la deuxieme instruction (visualisation par le debug) et ... je sais pas pourquoi.
Auriez vous une idée sachant que mon code est le suivant :
Unité qui appel le thread :
////////////////////////////////////////////////////////////////////////////////////////////////////////////
unit progEnr;
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form4 : TForm4;
implementation
uses
threadEnvar, Unit1;
{$R *.DFM}
procedure TForm4.Button1Click(Sender: TObject);
var
myThreadEnrCycl : threadEnrCycl;
begin if (editHeure.text '') or (editMinute.text '')
or (editSeconde.text = '')
or (nbH.text ='')
or (nbM.text ='')
or (nbS.text ='') then
ShowMessage('Veuillez saisir tous leschamps')
else
begin
Form1.debut := editHeure.text+':'+editMinute.text+':'+editSeconde.text;
Form1.duree := nbH.text+':'+nbM.text+':'+nbS.text;
//Form1 := TForm1.create;
// Form1.getEnrConf(heure, minute, seconde, duree);
end;
myThreadEnrCycl := threadEnrCycl.Create(False);
// Form4.Visible := False;
close;
if myThreadEnrCycl.Suspended = True then
messageBox(Handle,'Le thread est terminé','Avertissement',MB_OK);
end;
implementation
uses
progEnr;
{ Important : les méthodes et les propriétés des objets dans la VCL ne peuvent
être utilisées que dans une méthode appelée en utilisant Synchronize, par exemple :
Synchronize(UpdateCaption);
où UpdateCaption pourrait être du type :
procedure threadEnrCycl.UpdateCaption;
begin
Form1.Caption := 'Mis à jour dans un thread';
end; }
AssignFile(saveVar, Form1.nameFile);
ReWrite(saveVar); //Ouverture en mode ecriture while not (Time StrToTime(Form1.debut)) and (arretEnr 0) do
begin
end; while not (Time (StrToTime(Form1.debut) + StrToTime(Form1.duree)) ) and (arretEnr 0) do
begin
PCR_ReadMemoryArea(locator,
address,
lgth,
buffer);
if Form1.listAttribTrans[4*Form1.cbListVar.ItemIndex + 2] = 'NULL' then
begin
for i := 0 to (lgth - 1) do
begin
if i = 0 then
mul := 1
else
mul := i*256;
decimal := decimal + integer(buffer[i])*mul;
end;
end
else
begin
for i := (lgth - 1) downto 0 do
begin
if i = (lgth - 1) then
mul := 1
else
mul := i*256;
decimal := decimal + integer(buffer[i])*mul;
end;
end;
WriteLn(saveVar, IntToStr(decimal));
end;
closeFile(saveVar);
end;
roud59
Messages postés99Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention26 juillet 20072 8 juin 2006 à 14:34
Salut
Sans avoir tout lu et tout compris, je remarque que tu écris, dans ton Button1Click :
myThreadEnrCycl := threadEnrCycl.Create(False); OK ça lance le thread
...
Close; Si Form4 est la fenêtre principale, l'instruction ferme l'application entraînant l'arret du thread.
Peut être que l'erreur n'est pas là, mais je te donne une piste possible.
En plus
- dans Execute tu devrais lire la propriéte terminated et quitter la methode quand cette proriété vaut vrai. Rajoute dans tes while : (and not terminated)
- normalement tu devrais détuire manuellement le thread à la fin du programme (ou quand il est devenu inutile) et tu ne peux pas le faire car tu déclares myThreadEnrCycl comme variable locale.