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

MFC Discussion :

[MFC] ::WaitForSingleObject() innaccessible


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut [MFC] ::WaitForSingleObject() innaccessible
    Bonjour à tous.

    J'ai dans mon appli MFC une classe C++

    Je voudrais déclarer un thread qui puisse traiter des propriétés statiques et privée de ma classe.

    J'ai donc déclaré mon thread comme etant static et privé dans ma classe. Du coup je peux acceder à toutes les propriétés statiques de ma classe. Ca c'est parfait.

    Mais j'ai un probleme, impossible d'utiliser dans mon thread WaitForSingleObject

    Si je l'appelle simplement, je crois que le compilateur cherche dans la classe une methode statique au nom de WaitForSingle object et évidemment ne la trouve pas.

    si j'appelle ::WaitForSingleObject(HandleEvent, Timeout);

    Le compilateur me répond :
    error C2039: 'WaitForSingleObjet' : is not a member of 'operator``global namespace'''
    Je suis bien perdu dans tout ca, quelqu'un pourrait il m'expliquer?

    mon but est de ne pas avoir à sortir mon thread de ma classe, ce qui m'obligerait à rendre toutes mes statiques publiques pour etre accessibles depuis mon thread.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    montre ton code !

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    oulala t'es sur?

    Bon ok je l'allege à l'exemple et je le colle ici.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par giova_fr
    oulala t'es sur?

    Bon ok je l'allege à l'exemple et je le colle ici.
    ben la partie qui cause un pb a la compile ...

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    header de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class CXC64IOmodule
    {
    private:
    //Les statiques
    	static BOOL s_bRunThreadInputsListener;			//Flag controlant la sortie du thread nommé.
    	static HANDLE s_heventTopTimer;				//Evenement envoyé par le timer toutes les n Millisecondes.
    	static HANDLE s_htTrigGlobalgrab;			//Handle du thread qui check tous les Inputs
    	static unsigned int s_unTotalInputs;			//Nombres d'inputs sur la carte fille IO
    	static CXC64InputPin* Input;				//Tableau des Inputs alloué dynamiquement
     
    //Thread Static
     
    static DWORD WINAPI InputsListener(LPVOID lpParameter);
     
    public:
    void StartEngine()
    };
    code source de la classe (le probleme se déroule donc sur le WaitForSingleObject dans le thread)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    void CXC64IOmodule::StartEngine()
    {
    	s_bRunThreadInputsListener=TRUE
    	//Lance le Thread InputsListener
    	//Lance un Timer qui signalement l'event s_heventTopTimer toutes les 5 millisecondes
     
    }
     
     
    //////////////////////////////////////THREADS/////////////////////////////////////////
     
    DWORD WINAPI CXC64IOmodule::InputsListener(LPVOID lpParameter)
    {
    	unsigned int i=0;
    	CXC64IOmodule* pParent = (CXC64IOmodule*) lpParameter; //A noter que ca ne sert à rien
     
    	SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST);
     
    	//Tant qu'on ne demande pas au thread de sortir
    	while(s_bRunThreadInputsListener)
    	{
    		//On attends le top du timer
    		::WaitForSingleObjet(s_heventTopTimer,INFINITE);  //ERREUR A LA COMPILATION
     
    		//Pour toutes les pins d'input
    		for(i=0 ; i< s_unTotalInputs ; i++)
    		{
    			//Ne pas se soucier de ce if, trop long à expliquer ;)
    			if(!s_bRunThreadTrigPIVgrab || (s_bRunThreadTrigPIVgrab && i != s_usBurstTrigger))
    			{
    				//On lance le CheckState sur la pin (voir commentaire pour checkState)
    				Input[i].CheckState();
    			}
    		}
    	}
    	return 0L;
    }
    PS : evidement j'ai d'abord essayer WaitForSingleObject() et non ::WaitForSingleObject()

    precision :
    WaitForSingleobject donne :
    error C3861: 'WaitForSingleObjet': identifier not found, even with argument-dependent lookup

    ::WaitForSingleObject donne
    error C2039: 'WaitForSingleObjet' : is not a member of 'operator``global namespace'''

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    hum bizarre ,ta fonction statique est public ? d'apres ta classe non .
    tu utilises un namespace ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Non pas de namespace pour l'instant (je vais finir par y venir lol, un peu horrible tous ces CXC64IOModule:: )

    Dans le code que je cite (sauf erreur de ma part) il n'y a pas de methode static publique.

    Il y a un thread static privé (c'est peut etre ca que tu nomme methode statique publique?)
    et une methode "objet" public StartEngine() qui en vrai s'assure que le thread ne soit pas deja lancé....

    En bref StartEngine sert d'interface, utilisable par l'utilisateur.
    Tout le reste est privé.

    ---------------------------

    Enfin deja... question de principe :

    Est ce que ca parrait "logique" et courrant de déclarer un thread dans une classe pour qu'il puisse acceder à toutes les propriétés de la classe, meme privées?

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    le ; manquant dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void CXC64IOmodule::StartEngine()
    {
       s_bRunThreadInputsListener=TRUE
    c'est une erreur de recopie je suppose ?
    c'est une application MFC ? Win32 ?

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    oui erreur de recopie, si je met mon WaitForSingleObject en commentaire, je compile sans probleme.

    C'est une appli MFC oui.

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    dans la classe le ; manquant apres StartEngine() ,erreur de recopie ?


  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Si tu voyais la taille de mon code lol!!!

    Alors en fait j'ai retapé dans un bloc note une sorte de synthese de mon code.

    Le thread, c'est du copié collé.
    les déclarations commentées c'est du copié collé
    le reste c'est du tapé vite fait mal fait pour donner un petit apperdu de "l'esprit du code"

    Je te répete si je met WaitForSingleObject en commentaire, je compile, donc il ne manque aucun ; dans mon vrai code.

    Ce que je ne comprend vraiment pas faute de connaissance, c'est pourquoi le compilateur refuse le wait, alors que si je crée une methode toute bete, la ca passe, serait ce le WINAPI qui pose probleme?

    Mes seules connaissances pour les threads se résume au tutorial de bob sur les api windows, plus quelques posts du forum

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    t'as essayé avec l'opérateur de résolution de portée ? meme si ca me parait pas logique

  13. #13
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Citation Envoyé par giova_fr
    precision :
    WaitForSingleobject donne :
    error C3861: 'WaitForSingleObjet': identifier not found, even with argument-dependent lookup

    ::WaitForSingleObject donne
    error C2039: 'WaitForSingleObjet' : is not a member of 'operator``global namespace'''
    c'est la premiere chose que j'ai essayé en bon debutant que je suis

  14. #14
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par giova_fr
    ::WaitForSingleObject donne
    error C2039: 'WaitForSingleObjet' : is not a member of 'operator``global namespace'''
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::WaitForSingleObjet(s_heventTopTimer,INFINITE);  //ERREUR A LA COMPILATION
    Tu es sûr d'avoir bien écrit WaitForSingleObject ?

  15. #15
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Je... Euh... euh... j'ai honte tout ce temps perdu pour ca

    Et bien oui ca marche beaucoup mieux comme ca merci, et surtout désolé de vous avoir embété pour une connerie pareille.

    Conclusion, un thread déclaré en static privé dans une classe, ca marche

  16. #16
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    roohhh ...
    Equipe c++ --> <-- giova_fr


+ 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. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

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