begin process at 2012 05 30 13:45:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Système

 > 

Autre

 > 

Thread et IHM


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Thread et IHM

mardi 2 octobre 2007 à 17:57:11 | Thread et IHM

jamais34


Bonjour,
j'ai une classe qui implemente ses différentes interfaces :
class ATL_NO_VTABLE CPropPage :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CPropPage, &CLSID_PropPage>,
    public IPropertyPageImpl<CPropPage>,
    public CDialogImpl<CPropPage>

dans une des fonctions de cette classe je veux gérer une barre de progression. Pour celà je dois utiliser les threads car sinon l'IHM ne se met pas à jour.

J'ai donc créé une classe qui dérive de CWinThread et utilisé la fonction AfxBeginThread comme suit pour lancer le thread  :
UIThreaded* pUIThreaded = (UIThreaded*)AfxBeginThread(
   RUNTIME_CLASS(UIThreaded),
   THREAD_PRIORITY_ABOVE_NORMAL, 0,
   CREATE_SUSPENDED);
pUIThreaded->ResumeThread();

Jusqu'ici tout va bien, les fonctions InitInstance, ExitInstance, ... de la classe UIThreaded sont bien appellée. Maintenant ce que je voudrais faire s'est modifier l'IHM. En d'autre mots, récupérer l'object ProgressBar et en modifier les paramètres.
Est ce quelqu'un sait comment réaliser cela ?
Je suis aussi ouvert à l'utilisation d'une autre méthode pour gérer l'IHM à partir d'un thread.
Merci.
mardi 2 octobre 2007 à 20:12:39 | Re : Thread et IHM

The_Guardian

Bonjour,

tu as plusieurs moyens pour passer la ProgressBar, mais le plus utilisé dans les modèles objets c'est de la passer en paramètre au constructeur de ton objet
il faudra faire attention à ne pas avoir deux Threads différents qui modifient le même objet par contre (la ProgressBar en l'occurrence)
ça va si un affiche et un modifie si deux modifient ça va plus.. ( sans conviction )

===


Une autruche ne se cuit pas aux petits lardons
mardi 2 octobre 2007 à 22:27:57 | Re : Thread et IHM

DeAtHCrAsH

Par expérience je te déconseil de gérer la partie IHM dans un thread.
Privilègie plutot les evenements (cf PostMessage ou SendMessage).

Shell
mercredi 3 octobre 2007 à 19:30:03 | Re : Thread et IHM

jamais34

Alors,
j'ai finalement utilisé la fonction AfxBeginThread avec un prototype de ce type
CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);

j'ai modifié le constructeur de la classe passée comme premier paramètre pour avoir accès à la progress bar.
En effet dans la fonction (par exemple) InitInstance de ma classe de type CWinThread, j'arrive à gérer la barre de progression.

Là ou ca se complique, c'est au moment de l'exécution. Je remarque en observant l'IHM, que la modification de celle ci se fait seulement après que le thread principal ait fini son travail.
Par exemple un des boutons de l'IHM reste en position enfoncé tant que le code du thread principal n'a pas été éxecuté.
Pourtant je suis sur que le second thread fonctione car j'ai pu en vérifier le fonctionnement à l'aide de MessageBox.

Je tiens à préciser que je suis en train de développer une dll qui modifie l'interface graphique d'un logiciel (ETS3-KONNEX), outre cela la DLL doit aussi lancer du code qui gérer certainnes API de communication avec un bus bifilaire.
Ce code ne peut fonctionner que dans le thread principal, d'où l'impossibilité d'utiliser un thread de travail. Voir le prototype ci dessous.

CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);

D'autres bonnes suggestions ?



Cette discussion est classée dans : public, classe, thread, ihm, uithreaded


Répondre à ce message

Sujets en rapport avec ce message

Classe Thread [ par karakompact ] Pour mon travail et dans le but de créer une application, il me faut développer une classe Thread permettant de gerer le multitache..J'ai déjà ce type Lancer une thread intraclasse [ par rudyg ] Salut tout le monde,depuis une methode de classe, je souhaite lancer une thread faisant appel a une AUTRE methode de la meme classe.Ex:void kernel::La Synchronisation!!! [ par PunkDude424 ] J'ai un problème avec la synchronisation de ThreadVoilà, je fais un "ScreenSaver" qui affiche des point a des temps radom et dune durée random aussi.. template et héritage [ par cybermax62 ] j'ai un problème de fond dans ma conception. Je voudrais utiliser une classe template de base Singleton avec des classes héritées (plusieurs fois). Le /* * Classe CWindow */ template <typename T> class CWindow: public CSingleton<T> { private: protected: GtkWidget* pwindow; public: CWindow(); void init(void); Warning de compilation - méthodes virtuelles [ par neodelphi ] Bonjour tout le monde, Je suis en train de coder une classe et j'ai besoin de définir une méthode virtuelle pure. Ma première question est quelle est probleme avec des variable membre public [ par titouf71 ] Bonjour,J'ai un gros probleme avec des variables membres public.J'ai declare une variable membre en public en CString dans ma classe CLecture.Je voudr Dilemme de classe [ par tintin72 ] Bonjour, Dans mon programme j'utilise une liste chainée représentée par une classe Element.Les membres 'suivant', 'precedent' etc sont 'private' et le fonction recevant un pointeur de fonction d'une classe [ par fuliculi ] Bonjour à tous,j'ai un thread qui doit faire évoluer une variable "progress" de 0 à 100% (j'utilise les mutex pour éviter les écritures/lectures simul probleme avec le garbage collector [ par anthonycosson ] je suis en train de créer une dll en c++ .net , dans cette dll il y a deux classesla classe public __gc <FONT color=#0000f template et l'héritage [ par imad_lol ] salut.dans mon programme je déclare 2 classe X et Y.les 2 classe sont des classes templates et Y hérite de X :template class X{ };//******************


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales