MultiThreads dans DELPHI

jdweb Messages postés 2 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 14 mars 2006 - 16 juin 2005 à 16:01
jdweb Messages postés 2 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 14 mars 2006 - 14 mars 2006 à 17:11
Bonjour,

Je suis entrain de faire une appli multi fiches.
Chaque fiche est créé dynamiquement et s'affiche dans un onglet comme un navigateur internet. Pour l'instant ça va mais j'ai un probleme j'aimerais faire du multi-threading. En fait je veux que chaque fiche soit dans un thread. Je croyais arriver à mes fins mais si je lance un traitement long à l'interieur d'une de mes fiches : Ca me bloque tout donc je fais pas du vrai multi-threading.

Ma question est : Comment incorporer un TForm entier dans un Thread ?

Merci

A+

4 réponses

abatonime Messages postés 10 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 29 août 2007
5 nov. 2005 à 11:20
salut,

moi aussi cette question m'interresse

est ce que c'est possible et si oui, comment faire?

merci
abatonime
0
cs_mounjetado Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 4 août 2008
14 mars 2006 à 15:42
salut
pour ce que j'en sais tes threads devraient plutôt privilégier tout ce qui n'est pas graphique comme tes calculs.
ensuite pour rafraîchir ton écran ds chaque thread tu dois appeler une méthode qui prend en charge la mise à jour de ton affichage, via la méthode Synchronize().
chaque thread peut évidemment appeler un traitement particulier via synchronize, en l'occurence repeindre l'onglet concerné...
reste à faire en sorte que tes variables ou infos ou données soient accessible pour la form.

procedure TfrmEssaiPort.MiseaJour(Sender : TObject);
begin
Update; //par exemple ou
Edit1.Text := IntToStr(value);
end;

procedure TMeasuringThread.DoneMeasuring;
begin
frmEssaiPort.MiseaJour(Self);
end;


procedure TMeasuringThread.DoMeasuring;
begin
value := ReadingPortValue(monport); // par exemple
end;

procedure TMeasuringThread.Execute;
begin
{ Place thread code here }
while not Terminated do
begin
DoMeasuring; //nested begin end...
Synchronize(DoneMeasuring);
end;
end;


j'espère que tu arriveras à déchiffrer mes explications ;)
je ne suis pas un pro :p

si Delphi m'était conté...
0
cs_mounjetado Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 4 août 2008
14 mars 2006 à 17:00
euh au fait...
en mm tps si tu glanes qq info sur les TMultiReadExclusiveWriteSynchronizer et leur utilisation.... pense à m'en faire part!


<HR>
si Delphi m'était conté...
0
jdweb Messages postés 2 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 14 mars 2006
14 mars 2006 à 17:11
Salut

Merci pour ta réponse mais depuis j'avais abandonner le multi-theading visuel....

Depuis je bosse une une appli multi exe ; c'est à dire un exe qui lance d'autres exe...

Il n'y a plus d'onglet c'est la barre des taches qui me fait zapper mes programmes.

J'ai une question ?

Est-il possible de faire passer un TSession entre 2 exe :

Je me suis documenter sur le passage d'une structure (record) entre 2 applis : c'est tres bien et ca marche tres bien mais faire passer un composant en entier comme un TSession ou un TButton ça marche point...ça plante une erreur comme on les aime...

Avis aux amateurs de Delphi...

@+
0
Rejoignez-nous