Paramètres d'un Thread

Signaler
Messages postés
3
Date d'inscription
vendredi 2 août 2002
Statut
Membre
Dernière intervention
27 février 2005
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,



Je crée une DLL qui prends la main sur un installshield Wizard.

Jusqu'ici tout va bien, jusqu'au moment où je décide de créer le thread
qui va downloader les fichiers... En gros je n'arrive pas à trouver
comment passer une tructure, une chaine, ou un pointeur à mon thread.
Dans l'idéal, j'aimerai lui passer une structure.



Ma structure a cette gueule en gros pour le paramètre qui m'interesse:

struct DownloadThreadArgs

{

LPTSTR pFileToDownload;

};



Ensuite dans mon code:



DownloadThreadArgs paramsStruct;

paramsStruct.pFileToDownload = pFile;
hThread = CreateThread(NULL, 0, Download_Thread_Func, &paramsStruct, 0, &dwThreadId);



Sachant que la var hThread est ok, que pFile est du type LPTSTR et que
pFile a l'air OK car quand je fais un MessageBox(NULL, pFile, "Debug",
0) dessus il me donne la chaine de fichier...



Et ma fonction de thread:

DWORD WINAPI Download_Thread_Func(LPVOID lpParam)

{

DownloadThreadArgs params = *(DownloadThreadArgs*)lpParam;

MessageBox(NULL, params.pFileToDownload, "Got Str", 0);

return 0;

}



Toute aide est appréciée, soyez pas trop durs j'ai pas dormi :)



Pierre

3 réponses

Messages postés
3
Date d'inscription
vendredi 2 août 2002
Statut
Membre
Dernière intervention
27 février 2005

Je viens de reitérer quelques tests pour les poster:



Dites moi où je me gourre, dans ce test je voudrais passer un array de chars en paramètres du thread:



char szSomeStr[1024];

char * pSomeStr = szSomeStr;

sprintf(pSomeStr, "Ceci est un monstrueux test.");

hThread = CreateThread(NULL, 0, Download_Thread_Func, pSomeStr, 0, &dwThreadId);



et ma fonction de thread;

DWORD WINAPI Download_Thread_Func(LPVOID lpParam)

{

char * pReceived = (char *)lpParam;

MessageBox(NULL, pReceived, "Debug", 0);

return 0;

}



Le truc c'est que le message de debug m'affiche un messagebox vide...



Merci d'avance, si vous voulez plus d'infos demandez :)



Pierre
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Si szSomeStr est une variable locale, tu ne devrais pas l'utiliser dans
le thread, car rien ne permet d'affirmer qu'elle existe encore quand tu
l'utilise dans le thread. Utilise une variable globale, ou bien alloue
avec HeapAlloc et ne libère qu'à la fin du Thread
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Faire tres attention au HeapAlloc() interne à un thread, il faut garantir qu'il n'y en aura pas d'autre ailleurs pendant la durée de vie du thread sinon source de bug très difficile à retrouver.

Faire le HeapAlloc() par l'appelant et sa desalloc à la fermeture du thread.

ciao...
BruNews, MVP VC++