Probleme de synchronisation

Résolu
lamoueste Messages postés 76 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 3 juillet 2007 - 3 oct. 2005 à 09:47
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007 - 3 oct. 2005 à 13:38
Bonjour a tous voila j'ai un probleme avec un WaitForSingleObject dans ma fonction il devrait sortir au bout d'un certain temps dependant d'une variable ( int cpt) mais il reste bloquer a l'interieur alors je n'arrive pas a savoir d'ou vient l'erreur :( si quelqu'un a une idee merci d'avance :

uiCpt=1;
// wait for Duree * Minute or a press on the button stop
WaitForSingleObject(hEv,uiCpt*5000);

7 réponses

meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
3 oct. 2005 à 13:36
Re,



Un problème de cast, peut-être, théoriquement le second argument doit être un DWORD et non un entier (int).




<li>Un DWORD (double mot)
correspond à un entier non signé (codé sur 4 octets en environnement 32
bits). Il me semble que DWORD est défini par une macro de ce genre :

#define DWORD unsigned int


</li>
<li>Un int peut être signé (codé sur 2 octets sur les machines 16 bits et sur 4 pour les équipements 32 bits).
</li>

En gros, il semblerait que les parenthèses que tu as disposées s'apparente à :


WaitForSingleObject(hEv,(DWORD°(uiCpt*5000));

(...) dans le cas où ta variable uiCpt
était bien un entier de type int.



Pour information, quel compilateur utilises-tu ? Mais, l'important n'est-il pas que ta réalisation fonctionne bien ?



En espérant t'avoir un peu aidé,
Ciao.
3
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
3 oct. 2005 à 12:49
Salut,

A quoi correspond le HANDLE, premier argument de la fonction ? Quel est le but de la fonction que tu écrit ?

A plus tard.
0
lamoueste Messages postés 76 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 3 juillet 2007
3 oct. 2005 à 12:51
il s'agit d'un evenement ( appui du bouton stop ) on sort d'une boucle qd on appuie sur ce bouton :)
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
3 oct. 2005 à 13:07
Ah ! J'ai cru que c'était un mutex ou un truc du genre (je n'avais pas fait attention au nom du handle, pourtant assez explicite, hEv).



Ben, là, comme cela, je ne vois pas parce que tu sembles utiliser correctement la fonction...



S'il n'y a pas de confidentialité de ton code, n'hésite pas à me [mailto:programmation@fmichaud.com l'envoyer], j'essaierai de regarder. Mais je soupçonne plus l'hypothèse d'un problème en amont (l'évenement en l'occurence) qu'une utilisation incorrecte de la fonction.



A plus tard.
0

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

Posez votre question
lamoueste Messages postés 76 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 3 juillet 2007
3 oct. 2005 à 13:18
Ca y est j'ai trouvé l'origine du bug ( meme si je ne comprend toujours pas pourquoi... ) : a la place de :
uiCpt*5000 =>(uiCpt*5000) ce qui donne
WaitForSingleObject(hEv,(uiCpt*5000));

L'ajout de parenthese corrige le bug mais je ne sais pas pourquoi...
Si quelqu'un a connais la reponse juste pour l'aspect culturel :)
0
lamoueste Messages postés 76 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 3 juillet 2007
3 oct. 2005 à 13:38
oui ma variable etait un int c'etait sans doute un cast implicite raté qui faisait bugue ma belle appli ;)
Merci pour le coup de main :)
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
3 oct. 2005 à 13:38
Erratum : un degré tout pourri s'est glissé dans mon précédent message posté. Il fallait lire :

WaitForSingleObject(hEv,(DWORD)(uiCpt*5000));



Ciao.
0
Rejoignez-nous