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 :

[Win32]App multithread


Sujet :

Windows

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 41
    Par défaut [Win32]App multithread
    Bonjour ,

    Mon appilcation nécessite plusieur thread . Je souhaite donc utilisé la fonction CreateThread() de l'API Win32 . Mais le compilateur m'indique une erreur lors de la compliation alors que j'ai pratiquement recopier l'exemple d'un livre .

    Voisi ce que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateThread(NULL, 0, RunSrvThreadProc, param, 0, &RecvThreadID);
    En fait ce bout de code est appellé dans une méthode de ma classe CCocketManager et la procedure RunSrvThreadProc() est egalement une méthode de cette meme classe . Le compliateur(.NET) m'indique :

    error C2664: 'CreateThread'*: impossible de convertir le paramètre 3 de 'DWORD (LPVOID)' en 'LPTHREAD_START_ROUTINE'

    Je pense que le probleme est qu'ils sagit de fonctions membre mais comment faire ?

    J'ai egalement essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateThread(NULL, 0,&RunSrvThreadProc, param, 0, &RecvThreadID);
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateThread(NULL, 0,this->RunSrvThreadProc, param, 0, &RecvThreadID);
    Mais sans plus de succes !!!!

    Voila et merci ...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Par défaut
    Salut,

    Va voir l'URL http://support.microsoft.com/default...NoWebContent=1

    En gros, il faut que tu déclares ta fonction membre RunSrvThreadProc en statique avec en paramètre l'instance de ta classe (this):

    static RunSrvThreadProc(CCocketManager*);

    A l'appel, cela donne

    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(myCocketManager.RunSrvThreadProc), &myCocketManager, 0, &RecvThreadID);

    si ton instance s'appelle myCocketManager.

    Il faudra aussi faire attention à tes paramètres (dans ton code param) que je remplace par un pointeur sur l'instance.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 4
    Par défaut
    as tu bien declarer RunSrvThreadProc comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int WINAPI RunSrvThreadProc(void* ptr) {}

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 41
    Par défaut
    Merci ndietrich je pense que c'est la bonne voit mais le probleme c'est que CreateThread() est appellé dans une méthode de la meme classe que la Methode RunSrvThreadProc() .

    Pour la definition de la classe CSockManager j'ai donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class CSockManager
    {
    private:
                    ........................
                    ........................
                    ........................
    public:
                    ........................
    	static DWORD WINAPI RunSrvThreadProc(CSockManager*); 
                    ........................
    };
    Mais le compilateur refuse ceci puisque je lui demande comme parametre de RunSrvThreadProc() un objet CSockManager alors que cette classe n'est pas encore definit

    Comment faire ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 41
    Par défaut
    En fait je dis n'importe quoi , ca marche tres bien . Mille fois merci à ndietrich sans qui je n'aurai jamais resolut le probleme .

    Terible !!!!!!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Par défaut

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

Discussions similaires

  1. Console App VS Win32 app cacher console
    Par kaiser92 dans le forum Visual C++
    Réponses: 1
    Dernier message: 15/03/2010, 23h41
  2. WPF, Win32 app, XAML et code-behind?
    Par sacoum dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 27/05/2008, 10h06
  3. 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
  4. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

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