IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Utilisation de ResetEvent :


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut Utilisation de ResetEvent :
    Bonjour tout le monde,

    je travail sur la répartition de calcul de sur des architecture multicore, donc synchro de thread, j'ai utilisé SDL pour faire cette partie mais au vu des performance je suis entrain de passer a des outils windows(Section critique et Event vu que les conditions n'existe que dans vista).

    voila mon petit probleme
    j'utilise des Event (http://msdn2.microsoft.com/en-us/library/ms682655.aspx)
    dont un dont le reset est manuel.

    zoneReady = CreateEvent(NULL, TRUE, TRUE, (LPWSTR)"zoneReady");

    il faut donc faire un ResetEvent pour locker l'event quand tous les thread sont reveiller, ce qui actuellement ne marche pas.
    http://msdn2.microsoft.com/en-us/library/ms685081.aspx

    dans la doc sur le ResetEvent il y a ecrit : "The handle must have the EVENT_MODIFY_STATE access right"

    je pense que mon probleme est de mettre ce droit d'accé.
    Actuellement le resetEvent retourne une erreur, le probleme c'est que je vois pas comment mettre le droit d'accé a jour, dans l'exemple ils n'ont pas mis de droit particuler...
    http://msdn2.microsoft.com/en-us/library/ms686915.aspx

    j'ai trouvé
    - SetSecurityInfo mais je ne vois pas ou mettre l'EVENT_MODIFY_STATE
    - Le CreateEvent : la structure LPSECURITY_ATTRIBUTES est plutot obscure
    l'information a y mettre est
    LPVOID lpSecurityDescriptor;
    yes c'est cool !!! ... mais ca me fait une belle jambe un pointeur void

    bref je seche sur l'utilisation des Event manuel, si quelqu'un à une idée je suis preneur

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    (LPWSTR)"zoneReady"
    Très mauvais.
    Essaie avec _T("zoneReady") avant de chercher à modifier les droits de l'événement : En théorie, tu es censé les avoir déjà...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    _T() doit être un #define que je n'ai pas
    j'ai mis un TEXT("zoneReady"), mais pas mieux
    je doute que ce soit ça, si ça peu aider le code erreur par GetLastError() retourne '6'.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    _T et TEXT sont équivalents, mais l'un est défini dans tchar.h, l'autre dans windows.h.

    http://msdn2.microsoft.com/en-us/library/ms681382.aspx
    ERROR_INVALID_HANDLE.

    Ça veut dire que tu ne vérifies pas le retour de CreateEvent(), ce qui est un minimum...
    PS: Est-il vraiment nécessaire que cet Event soit nommé? Si oui, as-tu pensé à corriger TOUS les CreateEvent() ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    merci beaucoup pour la page c'est pratique de voir de quoi parle les erreur

    je n'ai pas besoin de le nommer, il était nommé pour rester proche de l'exemple

    if ((zoneReady = CreateEvent(NULL, TRUE, TRUE, NULL)) == NULL)
    cout << "Erreur de création d'Event " << GetLastError();

    mais le HANDLE est bien crée correctement
    j'ai vérifié une fois dans le thread le HANDLE est le même

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    le problème est résolut c'est moi ...
    un HANDLE est un pointeur

    et moi depuis je sais pas combine de temps j'utilise &HANDLE qui comme c'est aussi un pointeur passe a la compilation mais évidemment ne marche pas

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    En effet, c'est un problème que HANDLE soit un typedef sur void*.
    Heureusement, ils n'ont pas commis la même erreur pour les objets GDI : un HGDIOBJ reste en void* car il n'y a pas le choix, mais les handles vers des objets autres (HBRUSH, etc) sont des pointeurs vers un type propre au lieu d'être void*.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 68
    Points : 41
    Points
    41
    Par défaut
    merci beaucoup pour le lien vers les erreur system c'est bien util

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo