pthread_cleanup_push ??? [C++] - Programmation
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é ?
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]
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
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]
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
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