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 :

[C++/Posix] Pthreads sous Windows ? comment ?


Sujet :

Windows

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut [C++/Posix] Pthreads sous Windows ? comment ?
    Bonjour à tous ,

    Je cherche à faire un programme qui appelle deux fonctions en même temps , pour celà j'utilise Pthreads qui ont l'interet d'être à la norme POSIX , ce qui veut dire que ces pthreads sont compatibles avec tous les compilateurs supportant la norme POSIX ( comme GNU ) .
    Mais ce qui est bizarre c'est qu'avec mon compilateur G++ ne trouve pas le header pthread.h .
    À savoir , j'ai l'IDE wxDev-C++ , alors que ça marche très bien avec CygWin , pourriez vous m'aider s'il vous plait ?

    Merci d'avance .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bonjour,
    Je ne crois pas que Windows supporte les pthreads autrement qu'avec Cygwin...

    La question n'est pas le compilateur, mais la plate-forme.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Avec Boost.thread pour un truc portable ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    +1 pour Miles

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    ... ou QThread avec Qt

  6. #6
    Membre régulier Avatar de psyphi
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2006
    Messages : 119
    Points : 120
    Points
    120
    Par défaut
    pthread fonctionne bien sous windows, la preuve:
    http://sourceware.org/pthreads-win32/
    Je l'avais déjà utiliser lors d'un petit concours de programmation, ou le but était de créer un serveur portable acceptant plusieurs clients en même temps, il recevait une chaine du client et la renvoyait en inversé.
    Voici le code pour preuve, à l'époque j'avais utilisé dev-cpp et il faut bien mettre la dll pthreadGC2.dll dans le même répertoire que celui de l'éxécutable:
    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
    131
    132
    /*
     Concours 12 pour SecurityHack
     gcc -o Server concours12.c -lpthread
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #if defined(WIN32)
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
    #else
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <errno.h>
    #endif
    
    #include <pthread.h>
    
    #define PORT 2200
    #define BACKLOG 2
    #define MAXSIZE 1024
    
    void str_reverse(char * string)
    {
      int i = 0;
      int size = strlen(string);
      char cBuffer; 
      
      for(i=0;i < size/2 + 1;i++)
      {
        cBuffer = string[i];
        string[i] = string[size-1-i];
        string[size-1-i] = cBuffer;
      }
    }
    
    
    void * new_client(int sock_accept)
    {
      char * string = (char *) malloc(MAXSIZE*sizeof(char));
      int length;
      
      if(send(sock_accept,"Entrez une phrase : \n",21,0) == -1)
      {
        perror("send");
      }  
      
      if((length = recv(sock_accept,string,MAXSIZE,0)) == -1)
        perror("recv");
      else
      {
        string[length-1]='\0';
        fprintf(stdout,"Chaine recue   : %s \n",string);
      }
      
      str_reverse(string);
      
      if(send(sock_accept,string,strlen(string)+1,0) == -1) 
        perror("send");
      else
        fprintf(stdout,"Chaine renvoye : %s \n",string);
      
      #if defined(WIN32)
      closesocket(sock_accept);
      #else
      close(sock_accept);
      #endif  
      
      free(string);
      pthread_exit(0);  
      
      return NULL;
    }
    
    int main(int argc, char * argv[])
    {
      #if defined(WIN32)
      WSADATA WSAData;
      WSAStartup(MAKEWORD(2,0), &WSAData);
      #endif
    
      int sock;
      int sock_accept;
      
      struct sockaddr_in server;
      struct sockaddr_in client;
      
      int sin_size;
      
      pthread_t thread;
      
      if((sock = socket(AF_INET,SOCK_STREAM,0)) == -1)
      {
        perror("socket");
        exit(1);
      }
      
      server.sin_family      = AF_INET;
      server.sin_port        = htons(PORT);
      server.sin_addr.s_addr = INADDR_ANY;
      memset(&(server.sin_zero),'\0',8);
      
      if(bind(sock,(struct sockaddr * )&server,sizeof(struct sockaddr)) == -1)
      {
        perror("bind");
        exit(1);
      }
      
      if(listen(sock,BACKLOG) == -1)
      {
        perror("listen");
        exit(1);
      }
    
      fprintf(stdout,"En attente de connection ...\nCTRL + C pour quitter!\n");
      while(1)
      {
        sin_size = sizeof(struct sockaddr_in);
            
        if((sock_accept = accept(sock,(struct sockaddr * )&client,&sin_size)) == -1)
          perror("accept");
        else
        {
          fprintf(stdout,"Connection de : %s \n",inet_ntoa(client.sin_addr));
          pthread_create(&thread,NULL,new_client,sock_accept);
        }
      }    
      return 0;
    }
    Mon blog: http://blog.bores.fr
    Mon wiki: http://bores.fr/wiki
    Mes programmes libres: https://github.com/tbores

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce que tu appelles preuve est pour moi au contraire un contre-exemple: Cela prouve que Win32 ne supporte pas les pthreads, puisqu'il faut une bibliothèque pour cela.

    Edit: Je devais avoir mal lu, j'ai cru que tu contredisais mon post...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre régulier Avatar de psyphi
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2006
    Messages : 119
    Points : 120
    Points
    120
    Par défaut
    J'ai pas dit que ca supporte mais que ca fonctionne , enfin ne jouons pas sur les mots ^^.
    Mon blog: http://blog.bores.fr
    Mon wiki: http://bores.fr/wiki
    Mes programmes libres: https://github.com/tbores

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Et ACE en rolls-enclume parfaitement adaptée à l'événementiel, fortement typé, multi-threadé écoutant des sockets
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Oui m'enfin c'est un peu lourd pour un p'tit serveur de ce genre
    Par contre pour une vraie appli, solide, ACE colle parfaitement.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/11/2014, 22h38
  2. Réponses: 10
    Dernier message: 22/05/2008, 12h29
  3. pthread sous windows
    Par greg13 dans le forum Windows
    Réponses: 2
    Dernier message: 14/09/2007, 11h47
  4. installer pthreads sous windows!
    Par coax81 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 23/04/2007, 14h46
  5. Comment désactiver Ctrl+Alt+Del sous Windows XP
    Par ETOKA dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 04/06/2003, 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