Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2504 connectés 

 


Dernière réponse
Sujet : [C++] pthread_cleanup_push ???
sanglier04 ok mercie ,ca marche ! :)
 
franchement jy aurai jamais pensé a cette solution !
 
sinon pour le c , ca passait correctement  
 
voila et encore mercie

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
sanglier04 ok mercie ,ca marche ! :)
 
franchement jy aurai jamais pensé a cette solution !
 
sinon pour le c , ca passait correctement  
 
voila et encore mercie
verdoux En fait j'ai dit des conneries, ça n'a rien à voir avec les exceptions c'est juste le prototype de close qui va pas.
 
T'as qu'à déclarer:
void myClose(void * p)
{
 close(*((int *) p));
}
 
puis  
pthread_cleanup_push (myClose, (void *)&sock);

 

[edtdd]--Message édité par Verdoux--[/edtdd]

verdoux Et en C ?
sanglier04 ben la librairie de pthread_cleanup_push , la LinuxThread est directement integrer dans la glibc, je sais pas si on peut trouver une version pour le c++ a part. c kan meme bizzard car lorsque je fait pthread_cleanup_push (pthread_mutex_unlock, (void *) & mutex) ca ne passe pas non plus
verdoux Il doit y avoir un problème de gestion des exceptions c++ avec la librairie pthread.
En C ça doit passer.
 
Faut sans doute trouver une version de pthread compatible c++.

 

[edtdd]--Message édité par Verdoux--[/edtdd]

sanglier04 je le compile en c++ ( j'ai po le choix, j'utilise des classe )
 
ma ligne de commande : g++ -D_REENTRANT -lpthread ...
 
j'ai la version par defaut de gcc livrer sur la debian 2.2r3 (2.95 il me semble)
 
le fait de passe a la version 3 , ca pourrai amelioré ?
verdoux Euh tu compiles ça en mode c++ ou c ?
sanglier04 lut je veut utiliser cette fonction sous linux :
 
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
 
void main()
{
       char    *buff;
 
       buff = new char [50];
       pthread_cleanup_push (free, buff);
 
       pthread_cleanup_pop (1);
}
 
 
ca ca passe au compilateur mais maintenant si je lui passe une socket genre :
 
#include <pthread.h>
#include <unistd.h>
 
void main()
{
       char    *buff;
       int     sock;
 
       buff = new char [50];
       pthread_cleanup_push (free, buff);
 
       pthread_cleanup_push (close, (void *)&sock);
 
 
       pthread_cleanup_pop (1);
       pthread_cleanup_pop (1);
}
 
 
alors la le compilateur il aime po du tout et me sort l'erreure suivante :
 
passing 'int (*)(int) throw ()' as argument 2 of '_pthread_cleanup_push(_pthread_cleanup_push_buffer *, void (*)(void *), void *)'          
 
 
voila j'espère que kkun arrvira a me dire pourquoi ca ne marche pas car ca fait plusieurs heures que je suis dessus et j'arrive po :(

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)