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;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls; //, unit1;
type
TForm4 = class(TForm)
GroupBox1: TGroupBox;
editHeure: TEdit;
editMinute: TEdit;
editSeconde: TEdit;
Button1: TButton;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
GroupBox3: TGroupBox;
nbH: TEdit;
nbM: TEdit;
nbS: TEdit;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure ShowAsStartupScreen;
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;
procedure TForm4.ShowAsStartupScreen;
begin
// BorderIcons := [];
// caption := '';
// BorderStyle := bsDialog;
// Ok.Visible := false;
Show;
end;
end.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Ma thread :
////////////////////////////////////////////////////////////////////////////////////////////////////////////
unit threadEnvar;
interface
uses
Classes, unit1, Sysutils, pcrInt00, windows;
type
threadEnrCycl = class(TThread)
private
{ Déclarations privées }
protected
procedure Execute; override;
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; }
{ threadEnrCycl }
procedure threadEnrCycl.Execute;
var
myThreadEnrCycl : threadEnrCycl;
saveVar : TextFile;
////////////////////
i : integer;
resultat : string;
decimal : integer;
locator: string;
address: longint;
lgth: longint;
buffer: PChar;
mul : integer;
bufAdd : string;
tempAdd : string;
addStr : string;
sizeStr : integer;
erreur : integer;
begin
{ Placez le code du thread ici}
decimal := 0;
resultat := '';
addStr := '';
bufAdd := '';
tempAdd := '';
tempAdd := Form1.listAttribTrans[(4 * Form1.cbListVar.ItemIndex) + 1];
sizeStr := Length(tempAdd);
if sizeStr < 8 then
begin
erreur := 8 - sizeStr;
for i := 0 to erreur - 1 do
bufAdd := bufAdd + '0';
end;
tempAdd := bufAdd + tempAdd;
bufAdd := '';
bufAdd := bufAdd + tempAdd[7];
bufAdd := bufAdd + tempAdd[8];
bufAdd := bufAdd + tempAdd[5];
bufAdd := bufAdd + tempAdd[6];
bufAdd := bufAdd + tempAdd[3];
bufAdd := bufAdd + tempAdd[4];
bufAdd := bufAdd + tempAdd[1];
bufAdd := bufAdd + tempAdd[2];
address := StrToInt('0x' + bufAdd);
locator := '@canup_1_00A'; //'@TCU_2';
if Form1.listAttribTrans[4*Form1.cbListVar.ItemIndex + 2] = 'NULL' then
lgth := StrToInt(Form1.listAttribTrans[4*Form1.cbListVar.ItemIndex + 3])-1//4;//20;
else
lgth := StrToInt(Form1.listAttribTrans[4*Form1.cbListVar.ItemIndex + 3]);
buffer := StrAlloc(20);
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;
end.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Je sais que mettre le code comme ça ne rend pas le post conci et symaptique mais au moins vous pouvez voir toutes mes erreurs :p
Merci à vous d'avance.
Tcho et à bientot :D