Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 2011
-
8 déc. 2004 à 23:48
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
10 déc. 2004 à 00:09
Bonsoir tout le monde, c'est encore moi!
Voila voilou, j'ai un petit pb ac la fct CreateThread().
Je vous laisse regarder...
/* fichier de définition de la classe TConnect... */
// instructions
static DWORD _stdcall WaitForData(LPVOID pv) {
TConnect s = (TConnect) pv;
char buffer[500];
int size = sizeof(s->addr);
while(1) {
ZeroMemory(buffer, sizeof(buffer));
recvfrom(s->sock, buffer, sizeof(buffer), 0, (SOCKADDR*) &s->addr, &size);
}
}
bool TConnect::setUDPServer() {
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sock, (SOCKADDR*) &addr, sizeof(addr));
DWORD dwStat;
CreateThread(0, 0, this->WaitForData, (LPVOID) this, 0, &dwStat);
}
// autres instructions
/* fichier .h de la classe */
// instructions
public:
static DWORD _stdcall WaitForData(LPVOID pv);
bool setUDPServer();
void setPort(int _port);
//instructions
Le pb est que le compilo refuse de compiler ça! J'aimerais, comme vous le voyez que la fonction appelée par CreateThread soit une fonction de la classe et ce, parce que j'ai besoin de lui transmettre un objet TConnect! SI je la déclare à l'extérieur, j'ai également un souci : cannot convert void* to TConnect
(lorsque j'essaie le transtypage de LPVOID pv en TConnect...)
Merci de bien voulir m'aider! Si vous avez des questions ou voulez des précisions, n'hésitez pas! Merci à tous par avance! :)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 9 déc. 2004 à 00:47
fonction membre de classe doit etre declaree 'static', compilo doit savoir son adresse a la compilation.
TConnect s = (TConnect) pv;
c'est quoi ce bidule ? si c'est une classe, sers toi de _beginthreadex() au lieu de CreateThread sinon fuites de memoire a prevoir, le CRT ne saura pas quand appeler le destructeur.
?
C'est une fonction statique, mais elle fait quand même partie de la classe...
<table border=0 cellspacing=0 cellpadding=4 bgcolor=#E0E0E0><tr><td class=code>
CreateThread(0, 0, this->WaitForData, (LPVOID) this, 0, &dwStat);
<table border=0 cellspacing=0 cellpadding=4 bgcolor=#E0E0E0><tr><td class=code>
this->WaitForData n'a aucun sens puisque la fonction est statique.
A remplacer par TConnect::WaitForData