Posté(e) le 29 mars 200520 a 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 Modifié le 4 avril 200520 a par Solidus
Posté(e) le 30 mars 200520 a 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.
Posté(e) le 3 avril 200520 a Auteur Merci Irgoff pour le AfxBeginThread() et l'ami google à fait le reste 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; }
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.