Bonjour à tous,
Pour les besoins d'une application, je souhaite mettre en place un thread pour effectuer une traitement. Je ne maitrise pas trop le threading mais il me semble que c'est utilisé afin de générer un traitement indépendament de la fiche actuelle (c'est grossièrement dit peut-être ).
Donc, pour présenter vite fait l'application:
Une fiche me permet de sélectionner une application en cours d'exécution puis d'effectuer un traitement sur celle-ci. L'application concernée est liée à une imprimante et a donc pour but de lancer des impressions. Je place dans la méthode Execute le code permettant l'automatisation des demandes d'impressions et la gestion des dossiers où sont rangés mes fichiers à imprimer.
Dans le but de récupérer des informations sur mon traitement threadé, j'ai un objet memo dans ma fiche principale (où j'ajouterais des informations sur les traitements). J'ai donc regardé un petit exemple de code proposé par phidels.com. Dans celui-ci, on peu lire :
J'ai essayer de reproduire la logique du synchronize pour mon cas, mais je me retrouve avec un problème : le thread ne connait pas From1. Je ne sais pas trop comment m'y prendre pour récupérer mes informations du coup...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 uses Classes, Sysutils; type TUnThread = class(TThread) private Compteur:integer; protected procedure Execute; override; procedure UpdateCaption; end; implementation uses ThreadUnit1; { 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 UnThread.UpdateCaption; begin Form1.Caption := 'Mis à jour dans un thread'; end; } procedure TUnThread.UpdateCaption; begin Form1.LabelThread.Caption := IntToStr(Compteur); end; procedure TUnThread.Execute; begin Compteur:=0; {Pour que Terminate fonctionne, la méthode Execute du thread et toute méthode appelée par Execute doit tester périodiquement Terminated et quitter lorsqu'elle vaut True.} while (Compteur< 10000) and not Terminated do begin inc(Compteur); Synchronize(UpdateCaption); end; end;
[EDIT]
En ajoutant le Form1 aux uses de mon thread, c'est dans Form1 que j'ai un erreur : TThread non déclaré (alors qu'il est bien dans les uses...)
[/EDIT]
Auriez vous des pistes?
Merci par avance,
ZenZiTone.
Partager