begin process at 2012 05 28 05:03:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Accès aux objets MFC à partir de threads non-MFC (gros bras demandé)


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

Accès aux objets MFC à partir de threads non-MFC (gros bras demandé)

dimanche 7 mars 2004 à 22:04:54 | Accès aux objets MFC à partir de threads non-MFC (gros bras demandé)

Hell Dom

Bonsoir,

Mon problème vient du fait que je ne sais pas comment le faire proprement.

Donc en gros, j'ai une boite de dialogue qui lance un thread, ce dernier ajoute des infos dans une listBox.

>>>Version 1 (je me prend pas la tête)

// dans la DlgBox
AfxBeginThread(ServerThreadProc, this, THREAD_PRIORITY_NORMAL);
...

// dans le threads
UINT ServerThreadProc(LPVOID pParam) //copie de this
{
char* buffer = new char[SERVERMAXBUF];

CListBox* pListBox = static_cast<CListBox*> (((CWnd*)
pParam)->GetDlgItem(IDC_LIST1));
...
pListBox->AddString(buffer );
}

>>>>Version 2 (j'ai été lire le msdn mais je suis peu noob de la programation windows)
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_multithreading.3a_.programming_tips.asp

// dans la DlgBox
AfxBeginThread(ServerThreadProc, GetSafeHwnd(), THREAD_PRIORITY_NORMAL);
...

// dans le threads
UINT ServerThreadProc(LPVOID pParam) //copie de this
{
char* buffer = new char[SERVERMAXBUF];
CWnd * myPtrCWnd =CWnd::FromHandle((HWND)pParam);

CListBox* pListBox = static_cast<CListBox*> (myPtrCWnd->GetDlgItem(IDC_LIST1));

...
pListBox->AddString(buffer );
}
La version 1 c facile je passe this a mon threads.
Par contre dans la version 2 j'essaye d'utiliser un handle de windows (HWND) comme je l'ai vu souvent faire.
(ca me permet nottament d'envoyer des messages (via ce HWND) a destination de ma boite de dialogue)
Donc j'en suis là, j'ai mon HWND et je fait un FromHandle qui me retourne un pointeur sur ma boite de dialogue.
Ce qui revient au même que de passer this directement non ?
Sauf que dans msnd
(extrait voir ci-dessus pour art. complèt )
"Il existe différentes façons de contourner ce problème. La première est de passer au thread de travail des descripteurs individuels (par exemple, HWND) à la place d'objets C++. Le thread de travail ajoute alors ces objets à sa carte temporaire en appelant la fonction membre FromHandle appropriée. "

Dans mon exemple 2, la fonction membre FromHandle est elle utilisée de façon appropriée ?
(Si oui)
Pq La version 2 présente elle un intéret ?

Si je pouvais avoir quelques petites explication sur l'utilisation de FromHandle et l'histoire de la carte temporaire

(je vous le raconte comme je le comprend pour que vous puissiez me corriger si besoin est)

Merci pour vos réponse constructive


Cette discussion est classée dans : version, hwnd, thread, threads, fromhandle


Répondre à ce message

Sujets en rapport avec ce message

timer dans des threads [ par z3bul0n ] Comment faire pour gérer un SetTimer créé dans un thread sans utiliser de fonction : j'aimerai recevoir le WM_TIMER à chaque fois qu'il y en a un dans Threads et heap privé [ par mzhunix ] Salut à tous,je crée un heap privé "hHeapPrivate" dans le thread principale avec HeapCreate j'alloue quelques pointeurs dessus puis je crée un autre t à propos des threads [ par GUERRIER_ABSOLU ] Salut, je voudrais savoir s'i quelqu'un a déjà essayé d'appeler une fonction dans un thread et a remarqué quelque chose d'innatendu. En fait quand j'a Help (threads) [ par loicus ] Bon, bhen voila.. j'essaye de faire un threadj'aimerais ouvrir la fonctions LCD_BootScreen() dans un thread, donc j'utilise cette fonction :thboot= Cr Help (threads) [ par loicus ] Bon, bhen voila.. j'essaye de faire un threadj'aimerais ouvrir la fonctions LCD_BootScreen() dans un thread, donc j'utilise cette fonction :thboot= Cr thread priorité ? [ par sleeper41 ] Voila je medemandé si la priorité des threads pouvait influencer sur le compoirtement général du système.En fait j ai créer une appli qui lance plusie thread [ par m10s11 ] pour un prog créé avec l'appWizard je voudrais utiliser des threads or apres avoir créé les threads je n'arrive pas a les lier a des fonctions graphiq probleme avec les thread [ par macnao ] bonjour, je n'arrive pas à utiliser des threads avec builder 6, c'est a dire que je dois créer trois threads et ils doivent tourner en boucles, je sui Economise le temps machine [ par maddoc2 ] Bonsoir,Je suis en train de développer une application sous Windows dans laquelle des données à collecter ont deux origines possibles. Chaque origine Threads 2, le retour! [ par goondy ] Bon, grace a vecchio56, j'ai pu claquer mon thread comme il fallait (cf http://cppfrance.com/forum.v2.aspx?ID=349494&nb=9).J'explique le truc : j'ai u


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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,562 sec (4)

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