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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    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 .

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

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

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

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

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

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

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

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2006
    Messages : 119
    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;
    }

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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.

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