Aller au contenu

[RESOLU] Multitâches C++


Solidus

Messages recommandés

Salut, je programme en c++ et je voudrai créer 2 threads pour exécuter 2 choses séparement et je souhaiterai que un thread s'exécute au moment d'un évènement comme par exemple si je clique sur un bouton en utilisant MFC.

Mais je ne sais pas comment mis prendre :transpi:

Lien vers le commentaire
Partager sur d’autres sites

Si tu te sers des MFC, tu peux appeler la fonction AfxBeginThread(), avec :

- en premier parametre l'adresse de ta fonction que tu veux executer en thread

- en deuxieme parametre l'adresse du parametre eventuel que tu passes a cette fonction

les autres parametres de AfxBeginThread sont optionnels.

UINT MyThreadProc( LPVOID pParam )
{
   //Tu dois caster ton objet pour l'utiliser correctement
   CMyObject* pObject = (CMyObject*)pParam;

   if (pObject == NULL || !pObject->IsKindOf(RUNTIME_CLASS(CMyObject)))
       return 1;   // l'objet n'est pas valide
   //Ensuite tu utilises tes parametres comme tu veux pour faire ton traitement
...
   return 0;
}

dans ton programme principal (ou dans une autre fonction telle que le callback sur un clic de bouton) :

pNewObject = new CMyObject;
//Tu crees ton thread :
AfxBeginThread(MyThreadProc, pNewObject);

Recherche sur Google avec "AfxBeginThread" pour des exemples et plus de details sur les fonctions de thread avec les MFC.

Lien vers le commentaire
Partager sur d’autres sites

Merci Irgoff pour le AfxBeginThread() :incline: et l'ami google à fait le reste :yes:

Et j'ai même trouver le moyen de passer au thread directment des paramètres extérieur au thread

//Déclaration dans le .h du thread et de la structure
UINT ThreadFunc (LPVOID pParam);

//Structure dans laquelle tu met ce que tu veut que ton thread utilise
typedef struct tagTHREADPARMS {
   int nb;
   HWND hWnd;//id de l'écran
} THREADPARMS;

Puis dans la fonction de clic de la souris sur un bouton par exemple:

   THREADPARMS* ptp = new THREADPARMS;
   ptp->nb=nombr;
   ptp->hWnd = m_hWnd;//id de l'écran
   AfxBeginThread (ThreadFunc, ptp);

Et enfin ton code du thread

UINT ThreadFunc (LPVOID pParam)
{
   THREADPARMS* ptp = (THREADPARMS*) pParam;
   HWND hWnd = ptp->hWnd;
   int nombr=ptp->nb;
   delete ptp;

  //traitement du thread
  ..............
  return 0;
}

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...