cs_w38
Messages postés12Date d'inscriptionvendredi 16 août 2002StatutMembreDernière intervention 6 septembre 2002
-
16 août 2002 à 14:18
cs_w38
Messages postés12Date d'inscriptionvendredi 16 août 2002StatutMembreDernière intervention 6 septembre 2002
-
18 août 2002 à 00:57
Bonjour,
Étant donné que j'ai une application qui met un temps fou, j'ai décidé
d'utiliser des threads.
Toutefois, le bouquin que j'ai stipule une formule qui me génère une
exception.
Pourquoi ?
var // variable générale
threadID,hthread:thandle;
procedure test;stdcall;
begin
form1.query1.sql.clear;
form1.query1.sql.add('Select * FROM SAL');
form1.query1.open; // déclare l'erreur.
form1.label1.caption:='a'; // si je met que ca dans la procedure ca marche.
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
hthread:=createthread(nil,0,@test,0,0,threadID);
end;
garnotte
Messages postés14Date d'inscriptionmardi 29 janvier 2002StatutMembreDernière intervention18 février 20161 16 août 2002 à 16:49
Je ne crois pas que tu puisses modifier impunément ta form à partir d'un autre thread. J'ai eu un problème similaire dans une application bâtie sous XP, il a fallut que j'utilise le système de messages de Windows pour y arriver (fonctions SendMessage et PostMessage).
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 16 août 2002 à 19:17
Pour Garnotte : l'utilité des threads secondaires serait fortement discutable si l'on ne pouvait pas s'en servir pour mettre à jour des contrôles visuels sur une fiche !
Revois la déclaration de l'objet TThread et regardes parmi ses méthodes, tu devrais trouver une méthode qui porte le doux nom de Synchronize. Dis-toi que tu es aux portes du paradis...
cs_w38
Messages postés12Date d'inscriptionvendredi 16 août 2002StatutMembreDernière intervention 6 septembre 2002 16 août 2002 à 23:32
Je souhaite utiliser des threads pour gérer deux requetes en même temps.
En fait j'ai lu attentivement vos mails :big) , toutefois j'ai refait tout mon code, cette fois ca marche, mais les requêtes ne s'execute pas en même temps... Pourquoi ?
type T2 = class(TThread)
private
I:integer;
procedure Execute; override;
procedure Mostra;
end; { of class declaration }
type T3 = class(TThread)
private
I:integer;
procedure Execute; override;
procedure Mostra;
end; { of class declaration }
var
Form1: TForm1;
un_delay:tdelay;
implementation
{$R *.DFM}
procedure T2.Mostra;
begin
form1.query1.close;
form1.query1.sql.clear;
form1.query1.SQL.add('Select SA_MATRICULE,SUM(HU_VALEURCUMUL) AS MTT');
form1.query1.SQL.add('FROM F_HCUM');
form1.query1.SQL.add('GROUP BY SA_MATRICULE');
form1.query1.SQL.add('ORDER BY SA_MATRICULE ASC');
form1.query1.open;
form1.label1.caption:='OK';
end;
procedure T2.Execute;
begin
Synchronize(Mostra);
end; { of procedure }
procedure T3.Mostra;
begin
form1.query2.close;
form1.query2.sql.clear;
form1.query2.SQL.add('Select SA_MATRICULE,SUM(HU_VALEURCUMUL) AS MTT');
form1.query2.SQL.add('FROM F_HCUM');
form1.query2.SQL.add('GROUP BY SA_MATRICULE');
form1.query2.SQL.add('HAVING MTT>100');
form1.query2.SQL.add('ORDER BY SA_MATRICULE DESC');
form1.query2.open;
form1.label2.caption:='OK';
end;
procedure T3.Execute;
begin
Synchronize(Mostra);
end; { of procedure }
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.query2.sql.add('Select * from F_SAL');
form1.query2.open;
form1.query1.sql.add('Select * from F_SAL');
form1.query1.open;
T2.Create(false);
T3.Create(false);
end; { of procedure }
end. { of Unit }
end.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 16 août 2002 à 23:49
As-tu mis des noms de session différents pour chaque TQuery ?
Euh, qui est chargé de détruire les threads une fois qu'ils ont terminé de s'exécuter ?
Je ne vois ici nulle part d'affectation à la propriété FreeOnTerminate de chaque thread...
cs_w38
Messages postés12Date d'inscriptionvendredi 16 août 2002StatutMembreDernière intervention 6 septembre 2002 17 août 2002 à 12:06
En fait ca marche, mais le problème c'est que les processus s'exécutent les uns à la suite des autres... Sinon j'ai bien mis des sessions différentes au niveau des tquery.
Est-ce que quelqu'un peut m'envoyer du code à l'adresse w38@ifrance.com... Pour l'exécution de deux requêtes en même temps... Juste histoire de voir.