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 :

probleme thread/ SDL


Sujet :

Windows

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut probleme thread/ SDL
    salut tout le monde

    voila je suis entrain de coder un gros projet pour mon école
    et j'ai un probleme au niveau de se code


    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
    
    int WINAPI titi(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int iCmdShow)
    {
     // transforme une image bmp en jpg
    }
    
    int toto()
    {
         // code ayant besoin de la lib SDL
    } 
    
    int main(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int iCmdShow)
    {
        pthread_t thread;
    
        pthread_create(&thread, NULL, titi(), NULL);
        toto();
        pthread_join(thread, NULL);
    }


    voila donc le probleme c'est que titi prend 4 arguement pour fonctionner j'arrive pas a les envoyer dans pthread_create
    car il me dit fiew arguement !

    et aussi pour faire fonctionné la SDL dans toto le main doit avoir les arguement (int ac, char**av)

    donc voila je suis blocker je peut pas faire fonctionné les 2 programme en méme temp ...

    comment envoyer les arguement { HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int iCmdShow }
    directement a la fonction titi sans les déclarer dans le main ou une autre solution ???


    je sais plus ... je suis perdu a se niveau la
    quelqu'un pour de l'aide ?!

    merci bien

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 184
    Points : 12 326
    Points
    12 326
    Par défaut
    pthread_create(&thread, NULL, titi(), NULL);

    titi() -> c'est appeler la méthode titi sans paramètre au moment de l'évaluation des paramètre de la fonction, c'est à dire avant l'appel de la fonction proprement dite.

    Vous devez comprendre le concept de pointeur de fonction avant de vous servir de la fonction pthread_create.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    salut désoler je suis nouveau cela fait moin de 1 ans que je code
    comment faire ?
    pourrai tu me donner un exemple ou un bon lien
    merci ++

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    oki merci mais lsa a marché pour le pointeur sur sructure
    mais le probleme aussi

    c'est pour la lib SDL il faut que le prototype du main soit
    int main(int ac, char **av)
    et pour les argument de titi il faut le main prototypé
    int main(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int iCmdShow)

    comment faire si jveu enclancher les 2 ??
    jécrite quoi comme prototype pour le main ?

    merci ++

  5. #5
    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 582
    Points
    41 582
    Par défaut
    Les arguments HINSTANCE, HINSTANCE, LPSTR et int avec main() ? Y'a quelqu'un qui a fumé, ici.

    Ces quatre arguments s'utilisent avec WinMain()...
    • Le plus *** pour appeler un équivalent de WinMain() depuis main(), c'est lpszArg : Il faut y faire une recherche du premier espace qui ne soit pas entre guillemets...
    • Pour hInst, tu passes GetModuleHandle(NULL)
    • Pour hPrev, tu passes NULL
    • Pour iCmdShow, tu passes SW_SHOWNORMAL.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    salut
    pourrai tu me montrer un exemple basic de syntaxe j'ai rien comprise désoler
    merci

  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 582
    Points
    41 582
    Par défaut
    Impossible, je ne comprends pas assez ce que tu cherches à faire et je n'ai jamais utilisé SDL.

  8. #8
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par ritchou42 Voir le message
    salut
    pourrai tu me montrer un exemple basic de syntaxe j'ai rien comprise désoler
    merci
    tu as un tutoriel ici
    http://franckh.developpez.com/tutoriels/posix/pthreads/

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    
    #if defined (Win32)
    #  include <windows.h>
    #  define psleep(sec) Sleep ((sec) * 1000)
    #elif defined (Linux)
    #  include <unistd.h>
    #  define psleep(sec) sleep ((sec))
    #endif
    
    #define INITIAL_STOCK   20
    #define NB_CLIENTS      5
    
    
    /* Structure stockant les informations des threads clients et du magasin. */
    typedef struct
    {
       int stock;
    
       pthread_t thread_store;
       pthread_t thread_clients [NB_CLIENTS];
    }
    store_t;
    
    static store_t store =
    {
       .stock = INITIAL_STOCK,
    };
    
    
    /* Fonction pour tirer un nombre au sort entre 0 et max. */
    static int get_random (int max)
    {
       double val;
    
       val = (double) max * rand ();
       val = val / (RAND_MAX + 1.0);
    
       return ((int) val);
    }
    
    
    /* Fonction pour le thread du magasin. */
    static void * fn_store (void * p_data)
    {
       while (1)
       {
          if (store.stock <= 0)
          {
             store.stock = INITIAL_STOCK;
             printf ("Remplissage du stock de %d articles !\n", store.stock);
          }
       }
    
       return NULL;
    }
    
    
    /* Fonction pour les threads des clients. */
    static void * fn_clients (void * p_data)
    {
       int nb = (int) p_data;
    
       while (1)
       {
          int val = get_random (6);
    
          psleep (get_random (3));
    
          store.stock = store.stock - val;
          printf (
             "Client %d prend %d du stock, reste %d en stock !\n",
             nb, val, store.stock
          );
       }
    
       return NULL;
    }
    
    
    int main (void)
    {
       int i = 0;
       int ret = 0;
    
    
       /* Creation du thread du magasin. */
       printf ("Creation du thread du magasin !\n");
       ret = pthread_create (
          & store.thread_store, NULL,
          fn_store, NULL
       );
    
       /* Creation des threads des clients si celui du magasin a reussi. */
       if (! ret)
       {
          printf ("Creation des threads clients !\n");
          for (i = 0; i < NB_CLIENTS; i++)
          {
             ret = pthread_create (
                & store.thread_clients [i], NULL,
                fn_clients, (void *) i
             );
    
             if (ret)
             {
                fprintf (stderr, "%s", strerror (ret));
             }
          }
       }
       else
       {
          fprintf (stderr, "%s", strerror (ret));
       }
    
       
       /* Attente de la fin des threads. */
       i = 0;
       for (i = 0; i < NB_CLIENTS; i++)
       {
          pthread_join (store.thread_clients [i], NULL);
       }
       pthread_join (store.thread_store, NULL);
    
    
       return EXIT_SUCCESS;
    }

Discussions similaires

  1. Petit probleme pour SDL
    Par Asmod_D dans le forum SUSE
    Réponses: 2
    Dernier message: 16/08/2006, 19h09
  2. Probleme Compilation SDL
    Par Drannor dans le forum SDL
    Réponses: 4
    Dernier message: 22/07/2006, 21h48
  3. Probleme affichage SDL surface
    Par masterfrog dans le forum SDL
    Réponses: 4
    Dernier message: 27/11/2005, 17h25
  4. Installation Wesnoth problème configure/SDL
    Par Niktou dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 18/11/2005, 19h32
  5. [Kylix] Problème de thread
    Par A&Nexus dans le forum EDI
    Réponses: 1
    Dernier message: 03/05/2005, 21h48

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