Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre actif
    Homme Profil pro Alexandre
    Étudiant
    Inscrit en
    janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2011
    Messages : 184
    Points : 197
    Points
    197

    Par défaut Problème de mise en place de thread

    Bonjour,
    J'essaye en vain d'instaurer un système de thread dans mon code mais j'ai une belle erreur à la compilation :

    Code :
    error:*argument*of*type*'int*(mainwindow::)(void*)'*does*not*match*'int*(*)(void*)'|

    Voici ma fonction thread :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    int mainwindow::my_thread(void *data)
    {
        while(quitThread == false)
        {
            SDL_BlitSurface(feu1, NULL, screen, &positionFond);
            SDL_Delay(1000);
            SDL_BlitSurface(feu2, NULL, screen, &positionFond);
            SDL_Delay(1000);
            SDL_BlitSurface(feu3, NULL, screen, &positionFond);
        }
     
        return 0;
    }

    et la déclaration de SDL_thread dans une autre fonction :

    Code :
    1
    2
    SDL_Thread *thread;
    thread = SDL_CreateThread(my_thread, NULL);

    Merci

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    décembre 2006
    Messages
    1 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 622
    Points : 1 745
    Points
    1 745

    Par défaut

    Salut,

    de par le message de l'erreur, je pense à vue de nez que ton souci proviendrait du fait que ta fonction est en fait une méthode (ie. une fonction définie dans une classe), pas ce qu'attend SDL_CreateThread(), à savoir une fonction 'classique', définie en dehors d'une classe, comme n'importe quelle fonction en langage C.

    Les fonctions et les méthodes sont en effet deux concepts différents en C++, car (pour faire simple) la méthode englobe une sorte d'argument supplémentaire 'caché' (en tout cas par la syntaxe du C++), à savoir le pointeur 'this' de l'instance de classe qui constitue le contexte dans lequel elle est appelée.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  3. #3
    Membre actif
    Homme Profil pro Alexandre
    Étudiant
    Inscrit en
    janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2011
    Messages : 184
    Points : 197
    Points
    197

    Par défaut

    Enfaite c'est en mélangeant la SDL avec le C++ que les problèmes arrivent, tu as raison.
    J'ai donc tout refait en C est ça marche.

    Merci de ton aide

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •