caster une fonction - C++ - Programmation
Marsh Posté le 30-07-2003 à 16:55:24
prototype c vrai
Code :
|
Marsh Posté le 30-07-2003 à 17:24:19
Code :
|
A part ça ...
Marsh Posté le 30-07-2003 à 17:39:03
Kristoph a écrit :
|
ta fonction renvoie un int au lieu d'un void ...wraperForAD_Read
Je voulais faire un truc du style :
Je donne un parametre (void* pvoid) bidon a ma fonction AD_Read, je declare le pointeur de fonction ad_read: void (* ad_read) (void *);
et je fais
ad_read = comm.AD_Read;
le seul ptit hic c que AD_Read renvoie un int (je veux caster le retour de la fonction AD_Read en void). Je prefere ca, c plus propre que de creer une fonction de castage non (puis ca revient au meme que ta fct wraperForAD_Read nivo proto)?
g essaie :
Code :
|
mais ca passe pas
Marsh Posté le 30-07-2003 à 17:44:58
en fait c pour creer un thread !...la fonction executer par le thread doit obligatoirement rien renvoyer alors
Marsh Posté le 30-07-2003 à 17:50:04
Si je comprends bien, une fonction executer par un thread qui devrait renvoyee une valeur (c mon cas avec AD_Read) est impossible ? parce que cette valeur renvoyee servira a un autre thread...Suis je oblige de me taper une variable globale de m**de qui pu plus qu'un castage pour passer la valeur de retour du 1er thread au 2eme ?
Marsh Posté le 30-07-2003 à 17:55:36
Nan pas oblige
mais bon vu ton code ca marchera jamais ... ta fonction est pas statique a ta classe ou globale donc impossible de l utiliser en tant que Thread
Marsh Posté le 30-07-2003 à 18:02:15
VisualC++ a écrit : Nan pas oblige |
Tu peux expliquer
...tu veux dire que la fonction doit etre dans le meme fichier d'ou on appelle le thread ?
Marsh Posté le 30-07-2003 à 18:11:35
non la fonction doit etre une fonction globale ou alors une fonction statique membre d'un objet (une classe) sinon impossible de l utiliser (ca link pas il te le dit)
D'ou l'utilite du parametre passe lors du _begin dans le cas d'une statique, tu lui passe le pointeur sur ton objet (donc ta classe) et hop tu as acces a ton objet. Ou tu passes par un wrapper qui ne fait que appele une fonction non statique de ta classe, enfin c pareil a part se trainer des pThis-> ... c tout)
Car jsuis motive, code qui fonctionnera
Code :
|
voila de tete ca devrait etre bon
Marsh Posté le 30-07-2003 à 18:22:04
VisualC++ a écrit : non la fonction doit etre une fonction globale ou alors une fonction statique membre d'un objet (une classe) sinon impossible de l utiliser (ca link pas il te le dit)
|
Bah merci
...Mais j'ai exactement (ou bien j'allais faire exactement ) pareil hormis le mot cle statique de la fonction dans la classe sinon j'ai exactement pareil
PS : le mot cle statique d'une fonction signifie qu'elle n'est pas utilisable en dehors du fichier ou elle est definie...par consequent, ton appelle a _beginthread marche-t-il ? (j'essaierai tout ca merci )
Marsh Posté le 30-07-2003 à 19:12:41
giz a écrit : Bah merci |
Une fonction membre statique, ce n'est pas ça : c'est une fonction accessible en dehors de toute instance de ta classe
Marsh Posté le 31-07-2003 à 10:58:47
Kristoph a écrit : |
Citation : 1.6.6. Fonctions statiques |
Marsh Posté le 31-07-2003 à 11:05:21
giz a écrit :
|
le mot clé de sa phrase était "membre".
Marsh Posté le 31-07-2003 à 11:08:11
et pour le C++ :
Citation : 8.10.2. Fonctions membres statiques |
Marsh Posté le 31-07-2003 à 11:10:03
et moi je passe mon temps à faire des posts pour les mecs comme vous...
Marsh Posté le 31-07-2003 à 11:14:59
et pour l'exemple :
Citation : Exemple 8-15. Appel de fonction membre statique |
Conclusion : ben ouai a partir du main(), on n'a pas besoin de creer d'objet pour appeler la fonction (Donc c bien ca).
et ceci et donc moins cracra qu'une variable globale ? (declarer une fonction et une variable en statique ds la classe)
Marsh Posté le 31-07-2003 à 11:23:14
les fonctions machin(void) c'est du C pré-ANSI tout ça. c'est inutile. () veut bien dire pas de paramètres.
le return 0 final est facultatif. ton exemple fonctionne bien pour un type de base, pour des objets, c'est autre chose (problème d'initialisation)
Marsh Posté le 31-07-2003 à 12:32:02
lorsque qu'on execute une fonction de classe sans creer d'instance, on doit donc la declarer en statique...et si celle ci se sert des donnees menbres de la classe, on doit declarer TOUTES les donnees menbres de la classe en static...c cracra ?
Marsh Posté le 31-07-2003 à 12:39:26
Bon mon compilo (VC++6) n'a pas l'air de bien aprecier les fonction membres statique :
fichier ccard_comm.h :
Code :
|
fichier ccard_comm.cpp :
Code :
|
Errors de compilation :
Code :
|
des idees ?
Marsh Posté le 31-07-2003 à 12:45:46
j'ai enleve le mot cle statique dans ccard_comm.cpp...et j'ai plus qu'une erreur (la 1ere de ma reponse precedente)...que je ne comprend pas Mon code est le meme que l'exemple que j'ai cite (reponse juste avt Taz)
Marsh Posté le 31-07-2003 à 13:04:53
giz a écrit : j'ai enleve le mot cle statique dans ccard_comm.cpp...et j'ai plus qu'une erreur (la 1ere de ma reponse precedente)...que je ne comprend pas Mon code est le meme que l'exemple que j'ai cite (reponse juste avt Taz) |
Essaye de changer le nom de la variable...return_value désigne à la fois la variable et la fonction!
Marsh Posté le 31-07-2003 à 13:16:57
giz a écrit : j'ai enleve le mot cle statique dans ccard_comm.cpp...et j'ai plus qu'une erreur (la 1ere de ma reponse precedente)...que je ne comprend pas Mon code est le meme que l'exemple que j'ai cite (reponse juste avt Taz) |
Remet statique pour la fonction et vire moi le nom de ta variable=nom de ta fonction, ce que je t ai indique ca marche tres bien sous VC6 et VC.net et ca compile sans warning ni erreur
De plus pas besoin que ta variable de retour soit declare en statique .. et si c car utilisee par d autre thread autre que l appelant dans le code mm des threads c pas une statique qu il te faut (comme dit pThis->unevardelaclasse ca marche) mais une synchro via criticalsection/mutex/semaphore ou autre
Marsh Posté le 31-07-2003 à 13:20:48
skeye a écrit : |
vie c bon ...je ne savais pas qu'ils ne devaient pas avoir le meme nom
....
juste un dernier truc :
pour executer un thread 2 facons :
On cree une fonction ayant le bon prototype puis on fait comme l'a si bien fais VisualC++ (merci au passage)
ou bien
on met tout en statique dans la classe et on execute directement la fonction de la classe (dans mon cas c possible)
c 2eme solution est plus cracra non ?
Marsh Posté le 31-07-2003 à 13:23:15
VisualC++ a écrit : |
ben une fonction static menbres ne peut acceder qu'au donnees menbres static de la classe (cf citation)
Marsh Posté le 31-07-2003 à 13:31:15
Oui c vrai .. mais tu lis a moitie les indications donnee et la je peu rien pour toi.
Marsh Posté le 30-07-2003 à 16:44:23
quelque chose me dit que l'appel de _beginthread est faux (le 1er arg): voila le contenu de mes 2 fichiers :
Je voudrais appeler cette fonction AD_Read() avec l'objet comm. c possible ?
Message édité par Giz le 30-07-2003 à 16:58:45