Passage paramètre à une thread

Passage paramètre à une thread - C++ - Programmation

Marsh Posté le 09-03-2005 à 16:39:18    

Bonjour je suis sous visual studio 6 et je cherche à faire une thread qui va m'afficher genre toutes les 200 ms la valeur d'une variable présente dans la fonction appellant la thread.
 
Comment je peux faire pour passer un pointeur sur cette variable à ma thread ?
 
MErci d'avance.


---------------
APB
Reply

Marsh Posté le 09-03-2005 à 16:39:18   

Reply

Marsh Posté le 09-03-2005 à 17:13:34    

un thread prend un seul paramètre de type void*
donc en gros lors de la création du thread tu passes ton pointeur vers ta variable ( ou vers une structure par exemple pour passer plusieures variables) en le castant en void* et puis tu le recaste dans ton thread.  
 

le_pacifa a écrit :

la valeur d'une variable présente dans la fonction appellant la thread.


achtung a la portée de tes variables aussi

Reply

Marsh Posté le 09-03-2005 à 17:19:54    

J'ai le droit de faire un truc porc genre  
 
CreateThread(NULL,NULL,ThreadProc,(LPVOID)&toto,NULL,&ThreadId)
 
 
et ensuite dans ma fonction ThreadProc je fais comment pour aller lire toto ?


---------------
APB
Reply

Marsh Posté le 09-03-2005 à 18:00:05    

dans ThreadProc(void* param)
tu mets  
type_de_toto toto = *((type_de_toto*)param)
 
oui c'est très sale


Message édité par jan0 le 09-03-2005 à 18:00:31
Reply

Marsh Posté le 10-03-2005 à 19:58:52    

jan0 a écrit :

dans ThreadProc(void* param)
tu mets  
type_de_toto toto = *((type_de_toto*)param)
 
oui c'est très sale


 
 
ou plus propement :
 
[cpp]
hThread = CreateThread(NULL, NULL, fctThread, (LPVOID)(&toto), 0, &ThreadID);
 
...
 
DWORD WINAPI fctThread(LPVOID param)
{
 type_de_toto *toto  = const_cast<type_de_toto>(param);
...
}
[cpp]

Reply

Marsh Posté le 10-03-2005 à 20:00:08    

[quotemsg=1008766,5,241217]ou plus propement :
 

Code :
  1. hThread = CreateThread(NULL, NULL, fctThread, (LPVOID)(&toto), 0, &ThreadID);
  2. ...
  3. DWORD WINAPI fctThread(LPVOID param)
  4. {
  5. type_de_toto *toto  = const_cast<type_de_toto>(param);
  6. ...
  7. }


 
:D :D :D

Reply

Marsh Posté le 11-03-2005 à 15:50:50    

Salut,
 
Idéalement, faudrait penser à protéger l'accès à cette varaible par une CriticalSection.
En effet, si un des threads la modifie, pendant que l'autre la lit, tu risque d'avoir des valeurs "farfelues".
Je pense que ca ne doit pas arriver avec un système mono-proc.
Mais ca arrivera sous un bi-proc (voir avec de l'HT ?)...
 
William
http://www.directupdate.net/

Reply

Marsh Posté le 11-03-2005 à 16:24:09    

Oki merci je vais jeter un oeil :)
 
:)


---------------
APB
Reply

Marsh Posté le 11-03-2005 à 17:43:19    

Ca peut tout a fait arriver sur un systeme mono-proc car l'instruction de lecture ou d'ecriture n'est pas atomique et que donc ton processeur peut tres bien switcher de thread en plein milieu de ton ecriture (qui meme si cela represente une ligne de code C++ cela ne represente pas une seule ligne de code ASM).
 
 
 

willynt a écrit :

Salut,
 
Idéalement, faudrait penser à protéger l'accès à cette varaible par une CriticalSection.
En effet, si un des threads la modifie, pendant que l'autre la lit, tu risque d'avoir des valeurs "farfelues".
Je pense que ca ne doit pas arriver avec un système mono-proc.
Mais ca arrivera sous un bi-proc (voir avec de l'HT ?)...
 
William
http://www.directupdate.net/


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed