ptitmanu
Messages postés23Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention 8 février 2005
-
19 janv. 2005 à 10:10
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
19 janv. 2005 à 17:27
Bonjour,
J'ai un petit soucis avec AfxBeginThread.... l'appel de la methode ne retourne jamais.
Je ne fais rien de spécial pourtant, je declare un objet CWinThread et
je lui associe la valuer de retour de la méthode AfxBeginThread, mais
celle ci ne rend jamais la main. Quelqu'un aurais une idée sur
l'origine possible du probleme ? Je ne trouve nul part des references à
ce genre de probleme. Si vous avez des pistes à me suggerer, je suis
preneur.
apparemnt il vaut mieux éviter de faire des appels à des fonctions situées dans d'autre dll dans dllmain (en particulier faire des appels aux MFC) car toutes les dll n'ont pas forcément été chargée lors l'appel à ton dllmain.
page
"You must remember that DLLs use DllMain functions to initialize themselves. When your DllMain executes, other DLLs in the same address space probably haven't executed their DllMain functions yet. This means that they have not initialized, so you should avoid calling functions imported from other DLLs. In addition, you should avoid calls to LoadLibrary(Ex) and FreeLibrary from inside DllMain because these functions can create dependency loops.
The Platform SDK documentation states that your DllMain should perform only simple initialization such as setting up thread local storage (discussed in [mk:@MSITStore:C:\Documents%20and%20Settings\ymorgan\Mes%20documents\Divers\Richter4.chm::/HTML/ch21a.htm Chapter 21]), creating kernel objects, and opening files. You must also avoid calls to User, Shell, ODBC, COM, RPC, and socket functions (or functions that call these functions) because their DLLs might not have initialized yet or the functions might call LoadLibrary(Ex) internally, again creating a dependency loop.
Also be aware that the same problems exist if you create global or static C++ objects because the constructor or destructor for these objects is called at the same time as your DllMain function".
ptitmanu
Messages postés23Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention 8 février 2005 19 janv. 2005 à 17:12
Salut,
Pour repondre à ta question, je n'utilise pas WaitForSingleObject. Je
ne sais pas à quoi cela sert. Mais je pense que cela ne vient pas de
là, puisque c'est le thread principal qui fige... ou du moins la
methode AfxBeginThread qui ne retourne pas.
J'ai essayé plusieurs methode pour creer des threads et toutes figent
lors de la création du thread lorsque la création se fait pendant le
"DLL Attach Process" .... Par contre il n'y a aucun probleme lorsque je
demarre le thread par la suite.
Est ce un comportement normal pour toi ?
Je vais voir avec WaitForSingleObject, mais je n'y crois pas...enfin
n'ayant pas franchement les idées tres claires sur le mecanisme
d'initialisation des DLL, je voir.