Solidus Posté(e) le 29 mars 2005 Posté(e) le 29 mars 2005 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
Irgoff Posté(e) le 30 mars 2005 Posté(e) le 30 mars 2005 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.
Solidus Posté(e) le 3 avril 2005 Auteur Posté(e) le 3 avril 2005 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; }
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.