bonjour j'ai un souci avec le multithreads.
crétation d'objtes threads...
Enfin bref quelqun peu m'aider et me donner un exemple .
Et j'ai un problème pour donner à prioriy la valeur "tpIdle" il reconnait pas le symbole.
Merci de m'aider :
bonjour j'ai un souci avec le multithreads.
crétation d'objtes threads...
Enfin bref quelqun peu m'aider et me donner un exemple .
Et j'ai un problème pour donner à prioriy la valeur "tpIdle" il reconnait pas le symbole.
Merci de m'aider :
donne nous ton code ( qui concernne seulement la création de thread ). Pour tplde, j'en sais rien mais va voir le tuto sur les thread de developpez.com
Ceci est le début du thread car je n'ai pas avancer plus carj'ai une erreur avec tpIdle et je ne comprend pas pourquoi
Thread.cpp
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 #include <clx.h> #pragma hdrstop #include "Thread.h" #include "main.h" #include "CSerial.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // Important : les méthodes et propriétés des objets de la CLX peuvent uniquement être // utilisées dans une méthode appelée en utilisant Synchronize, comme : // // Synchronize(&UpdateCaption); // // où UpdateCaption pourraît être de la forme : // // void __fastcall TMonThread::UpdateCaption() // { // Form1->Caption = "Mis à jour dans un thread"; // } //--------------------------------------------------------------------------- __fastcall TMonThread::TMonThread(bool CreateSuspended) : TThread(CreateSuspended) { Priority = tpIdle; // priorité basse FreeOnTerminate=true; } //--------------------------------------------------------------------------- void __fastcall TMonThread::Execute() { //---- Placer le code du thread ici ---- //libération automatiquement }
Thread.h //créé automatiquement
je ne sais pas trop quoi car là je me sers du bouquin kylix mais c'est pas très clair et çà ne dis pas koi inclure.
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 #ifndef ThreadH #define ThreadH //--------------------------------------------------------------------------- #include <Classes.hpp> //--------------------------------------------------------------------------- class TMonThread : public TThread { private: protected: void __fastcall Execute(); public: __fastcall TMonThread(bool CreateSuspended); }; //--------------------------------------------------------------------------- #endif
il me semble d'après l'aide de kylix que les priorité sous linux sont des nombres entiers. J'ai déjà essayé, ça marche avec zero mais avec un nombre supérieur à zero, ça marchais pas. J'ai pas insisté par la suite. Une chose encore , la configuration du thread, je préfère la faire avant son exécution ( j'ai eu des trucs bizzard aussi ), cad rien dans le constructeur du thread et lors de la création du thread dans le thread principale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Monthread * thread = new Monthread ( true ) ; //le thread est suspendu thread->Priority = 0 ; thread->FreeOnTerminate = ... ; thread->OnTerminate = & TaFonction ; //exécutée avant fin thread //... thread->Resume () ; //le thread s'exécute.
Ok merci mais je t'assure que pour mettre en priorité la plus basse il y a marqué qu'il faut mettre tpIdle mais çà marche pas.
es tu convaincu que :
soit nécessaire ?a quoi cela va me servir exactement ? si il n'y a que 1 fonction est ce nécessaire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part thread->OnTerminate = & TaFonction ; //exécutée avant fin thread
OnTerminate n'est pas necessaire pour les priorité. Mais ça peut être utile, regarde l'aide. J'ai juste fait un copier coller d'un de mes sources. Pour tpIdle, je sais pas, mais je doute que cela existe sous linux, enfin ...
J'ai instancié le threads dans mon "main"
hé bien là j'ai compris mais le problème c'est que je n'arrive pas à me servir des objets de mon programme principale :
exemple: Tform1 et je voudrais accéder au bouton enregistrement
Donc je voudrais faire dans le thread :
Mais çà ne fonctionne pas je n'arrive pas à accéder aux objets. Une solution ? :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Enregistrement->Click();
J'ai instancié le threads dans mon "main"
hé bien là j'ai compris mais le problème c'est que je n'arrive pas à me servir des objets de mon programme principale :
exemple: Tform1 et je voudrais accéder au bouton enregistrement
Donc je voudrais faire dans le thread :
Mais çà ne fonctionne pas je n'arrive pas à accéder aux objets. Une solution ? :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Enregistrement->Click();
Tu ne peux pas accéder aux objets CLX sans synchronisation entre le thread et le thread principale ( ton " main ") , mise à part certain ( voir la doc ). La méthode synchronize est là pour ça :
Un conseil, lit bien l'aide de kylix et surtout la doc sur la classe TThread.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void _fastcall MonThread::procedure () //necessairement sans argument { Form1->Enregistrement->Click () ; /*MonThread doit posséder un pt sur la forme possédant le bouton*/ } quelque part dans la méthode execute : Synchronize ( & procedure ) ; //execution de la méthode procedure synchronisée avec le thread principale.
L'aide sous entend d'autres techniques, mais je ne les connais pas ( post de message, etc ... )
Fais un tour sur le forum C++ Builder. A part les histoires de priorité qui sont dépendantes du sys tème exploitation, les thread sous kylix sont les même que sous C++ Builder.
beh merci mais le problème c'est que Form1-> ne marche pas et je comprend pas pkoi pourtant j'ai inclu main.h
J'ai eu le même problème que toi au sujet du pointeur sur la Form principale ( Form1 ). Je l'ai résolu en ayant un pointeur attribut de classe du type de ta Form1 avec initialisation dans le constructeur, dans ta classe thread. Attention au inclusion mutuelle entre le .h de ton thread et le .h de ta Form ( il faut pour cela faire une déclaration à l'avance ).
c'est vrai que kylix crée automatiquement un pointeur Form1 dans le .cpp de ta classe TForm1. Mais comme tu inclues le .h, il n'est pas accessible.
ok merci çà marche mon thread . mais leproblème c'est que j'ai l'impressionb qu'il y a très peu de temps qui lui est accordé par le processeur alors il a pas le temps de ce faire entièrement alors est ce que quelq'un connait la priorité normal du application pour que je le mette un peu en dessous (niveau priorité) ???
Je suis mal parti car je ne sais comment réglé la priorité correctement car qd je met un autre truc que zero çà fait des erreurs dans tous les ens alors je comprend pas trop.
Grosse déprime
J'ai donc essayé d'aborder le sujet autrement n faisant par évènement mais la c la galère encore plus le programme plante. Il faut que je trouve le moyen de régler une priorité assez élevé quelqu'un sait ?
Hello
En ce qui me concerne, j'avais le mm pb : je ne pouvais pas acceder a tous les elements que je voulais... J'ai trouve une parade infaillible : pthread_create !!!
Tres simple d'utilisation :
pthread_t *MonThread;
MonThread = new pthread();
pthread_create(MonThread,NULL,Function,(void*)Param);
sleep(500);
Et dans ta fonction, tu fais ce que tu veux que ton thread fasse...
Param est un pointeur sur les parameter de ta fonction. Si tu fonction a besoin de plusieurs parameters, passe un pointeur sur une structure...
J'insiste sur le sleep qui laisse le temps au thread de recopier les valeurs avant que tu ne quitte ta fonction...
Je pense qu'il y a egalement de regler la priorite... A toi de voir, bon courage...
Quand j'entend ce que j'entend et que je vois ce que je vois, il est normal de penser ce que je pense !
Le sleep est obligatoire pense tu vraiment ???
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager