Thread et options de compilation

cs_khayyam Messages postés 51 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 15 juillet 2005 - 20 déc. 2004 à 23:36
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 21 déc. 2004 à 13:50
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 déc. 2004 à 23:50
Regarde EnterCriticalSection() dans MSDN.

ciao...
BruNews, MVP VC++
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
20 déc. 2004 à 23:58
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...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
21 déc. 2004 à 09:00
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
0
cs_khayyam Messages postés 51 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 15 juillet 2005
21 déc. 2004 à 09:44
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
21 déc. 2004 à 09:50
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 déc. 2004 à 10:59
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++
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
21 déc. 2004 à 13:50
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)
0
Rejoignez-nous