Thread et options de compilation

Signaler
Messages postés
51
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
15 juillet 2005
-
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
-
bonsoir tout le monde

je cherche à utiliser les threads avec devc++

je créé donc un tread

threadName = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threadfunc, NULL, CREATE_SUSPENDED, &ThreadID);

et dans ma fonction threadfunc, je modifie une variable globale dont je regarde régulièrement la valeur. Celle ci ne change jamais.
Je me dis donc que j'ai oublié quelque chose.

De même que sous unix, il ne fait pas oublier l'option -lpthread, y a-t-il qqch de semblable à ne pas oublier sous windows ?

7 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Regarde EnterCriticalSection() dans MSDN.

ciao...
BruNews, MVP VC++
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Ou plus simple, tu le crées avec CREATE_SUSPENDED... Mais as-tu bien pensé à appeler ResumeThread après l'avoir créé ?

Sinon comme le fait remarquer BruNews : ne JAMAIS modifier une variable globale dans un thread sans l'entourer d'une section critique, sinon attention aux accès concurrents...
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Voir Richter pour les histoires de variables globales scrutées par un thread :
http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

voir en particulier les fct Interlocked, le mot clé volatile
Messages postés
51
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
15 juillet 2005

mon problème est déjà de créer correctement mon thread. Il ne se lance pas.

De quelles options de compilation ai-je besoin ?
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Aucune option de compilation n'est requise pour lancer le thread (il faut tout de même spécifier la lib multi-thread du Runtime sous VC mais sous dev-cpp je ne crois pas que cela soit nécessaire).

Il est inutile de faire un cast (LPTHREAD_START_ROUTINE)threadfunc, si le prototype de la fct threadFunc est le bon, cela doit passer direct à la compilation, sinon c'est qu'il y a un pb.

DWORD WINAPI threadfunc(LPVOID lpParam)
{
return 0;
}

vérifie également le handle retourné par CreateThread, s'il vaut NULL, fait un appel getlastError
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Quand on utilise CreateThread(), donc direct API, pas besoin de la lib multi thread CRT. En ne la mettant pas, on obtient d'ailleurs un exe moins gros.

ciao...
BruNews, MVP VC++
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
mon problème est déjà de créer correctement mon thread. Il ne se lance pas.

=> t'as essayé ce que j'ai dis plus haut (ResumeThread) ?

De quelles options de compilation ai-je besoin ?

=> aucune de spécifique à windows (hormis linker à kernel32 mais c'est déjà fait)