[C++] pthread_cleanup_push ???

pthread_cleanup_push ??? [C++] - Programmation

Marsh Posté le 11-08-2001 à 13:57:48    

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 :(

Reply

Marsh Posté le 11-08-2001 à 13:57:48   

Reply

Marsh Posté le 11-08-2001 à 14:10:05    

Euh tu compiles ça en mode c++ ou c ?

Reply

Marsh Posté le 11-08-2001 à 14:20:03    

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é ?

Reply

Marsh Posté le 11-08-2001 à 14:30:55    

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]

Reply

Marsh Posté le 11-08-2001 à 15:06:19    

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

Reply

Marsh Posté le 11-08-2001 à 15:10:20    

Et en C ?

Reply

Marsh Posté le 11-08-2001 à 15:27:46    

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]

Reply

Marsh Posté le 11-08-2001 à 16:05:26    

ok mercie ,ca marche ! :)
 
franchement jy aurai jamais pensé a cette solution !
 
sinon pour le c , ca passait correctement  
 
voila et encore mercie

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed