cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 23 févr. 2010 à 10:14
Mise à jour:
-- Le code est un peu plus solide et complet.
-- Nouvel exemple un peu plus simple avec la classe "List", visible en ligne.
xydion :
J'ai surtout ajouté des templates pour vérifier la signature de la fonction transmise à SLOT.
Donc j'ai corrigé dans le fichier "events_example.cpp". Le problème ne devrait plus se reproduire car
le compilateur sort une erreur assez explicite je pense :)
Prochaine étape : utilisation multi threaded
xydion
Messages postés1Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention16 février 2010 16 févr. 2010 à 11:03
Il y a une petite erreur dans le code source.
Le SLOT OnIntegerCanChange prend un pointeur en paramètre donc:
Remplacer par :
void SLOT(OnIntegerCanChange)(CanChangeEventArgs* args)
{args->accept (args->new_value%2 0);
}
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 20081 18 nov. 2006 à 03:23
Belle source, il reste maintenant juste à ajouter le support thread pour des événements non-bloquants :p
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 17 nov. 2006 à 16:31
yann_lo_san >> J'ai supprimé le "6/10". Tu peux renoter.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 17 nov. 2006 à 13:45
Désolé pour le 6/10, si je pouvait renoter je mettrais plutot 8/10 (pour le .hh avec templates).
Bonne continuation.
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 17 nov. 2006 à 01:43
Et puis dans le titre j'ai dit en "C++ pure",
donc c'est sans compter sur les compilateurs qui ajoutent leurs extensions :)
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 17 nov. 2006 à 01:41
Merci pour cette remarque très constructive :) !
En revanche, sous linux, pas d'autre alternative à ma connaissance avec g++ :/ !
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 17 nov. 2006 à 00:41
Heu, je retire ce que j'ai dit, Microsoft l'a implémenté en native c++ (managed je présume) :
// Vu dans MSDN
#include <stdio.h>
[event_source(native)]
class CSource {
public:
__event void MyEvent(int nValue);
};
[event_receiver(native)]
class CReceiver {
public:
void MyHandler1(int nValue) {
printf("MyHandler1 was called with value %d.\n", nValue);
}
void MyHandler2(int nValue) {
printf("MyHandler2 was called with value %d.\n", nValue);
}
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 16 nov. 2006 à 23:30
Tu dis que cela peut etre utile... et apres tu te poses la question ?
On est pas en C# la !
Donc étant donné que c'est super interessant à utiliser dans les autres langages, c'est pour ca que je propose cela en C++.
De plus si tu regardes le fichier events.hh, ce sont egalement des pointeurs qui se cachent...
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 16 nov. 2006 à 15:49
L'exemple mis de coté, j'ai bien insisté sur le fait que ceci pouvait être utile ! Mais la question était es-ce vraiment utile en c++ ?
un delegate C# est juste un pointeur sur une fonction...
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 16 nov. 2006 à 14:59
Lol, vous savez ce que sont les évènements :p ?
J'ai l'impression que vous n'avez pas compris que ces sources sont un exemple.
Et donc comme la majorité des choses que l'on apprend, on démarre avec des exemples très simples, où la signification concrete et la manipulation des objets n'ont pas à fatiguer l'esprit de la personne qui le lit.
Bien sur que manipuler un entier (int) au travers d'une classe est inutile.
Mais cela permet à tout le monde de se faire une idée de ce à quoi devrait ressembler le code, avant même qu'il ne l'ai lu. De plus, un entier étant une chose tellement commune, je pense que tout le monde penserait à la même implémentation (ou presque).
Bien sur que vérifier qu'un nombre est pair est très simple !
Même raison qu'au dessus.
Si j'avais pris un exemple avec mes idées loufoques (On a tous nos idées loufoques ;), non seulement il aurait fallu que vous compreniez ce qu'à la base je voulais coder et ensuite seulement la façon dont je l'ai fait, imaginé, avec les macros que je présente ici.
Pour finir, j'insiste sur le fait que j'ai justement codé quelquechose qui soit COMPLETEMENT compréhensible, à tel point qu'au final la seule chose qui importe vraiment soit la façon de l'écrire, non la façon de le penser en terme de modélisation.
J'encourage donc tout le monde à avoir recours à ce genre d'exemple, et espère que je ne suis pas seul à penser ça !
Mais puisque la remarque m'a été faite, qu'on dialogue entre gens civilisé, et que j'ai dit que j'acceptais toutes les critiques (ce qui signifie que j'étais prêt à être réactif), je vais proposer ce soir un autre exemple, réellement utile.
Il faut juste que je trouve une idée concrete, pas trop compliqué, et qui soit utile.
Si certain ont des idées d'ici ce soir ..., je suis tout ouïe !
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 16 nov. 2006 à 14:30
Même remarque que Arnaud16022, il suffit pour ton exemple d'un (nombre % 2 == 0) pour pair/impair.
Donc un exemple plus explicite serait le bienvenue.
Mais demandons nous pourquoi cela n'a pas été implémenté dans le standart C++ à l'instar de Java et C# ?
Sinon, bonne utilisation classes, je te mets 6.
Bonne continuation...
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 16 nov. 2006 à 12:44
atta, j'ai un pb là...
"gestion des callbacks proprement et sans prise de tête"
et tu dois encapsuler un int ?
Dans ton main, je ne vois réellement pas l'intérêt de ce que tu fais ... tu n'as pas un exemple un peu plus explicite ? parce que j'ai du mal à m'imaginer en quoi tout ton prog est mieux que
int integer = 42; std::cout << integer ;
Voilà, je suis désolé de ne pas saisir la subtilité/ utilité de ton prog ... le pire c'est que je suis sûr qu'on fond c'est pas stupide du tout :p
need explanations :'(
23 févr. 2010 à 10:14
-- Le code est un peu plus solide et complet.
-- Nouvel exemple un peu plus simple avec la classe "List", visible en ligne.
xydion :
J'ai surtout ajouté des templates pour vérifier la signature de la fonction transmise à SLOT.
Donc j'ai corrigé dans le fichier "events_example.cpp". Le problème ne devrait plus se reproduire car
le compilateur sort une erreur assez explicite je pense :)
Prochaine étape : utilisation multi threaded
16 févr. 2010 à 11:03
Le SLOT OnIntegerCanChange prend un pointeur en paramètre donc:
Remplacer par :
void SLOT(OnIntegerCanChange)(CanChangeEventArgs* args)
{args->accept (args->new_value%2 0);
}
18 nov. 2006 à 03:23
17 nov. 2006 à 16:31
17 nov. 2006 à 13:45
Bonne continuation.
17 nov. 2006 à 01:43
donc c'est sans compter sur les compilateurs qui ajoutent leurs extensions :)
17 nov. 2006 à 01:41
En revanche, sous linux, pas d'autre alternative à ma connaissance avec g++ :/ !
17 nov. 2006 à 00:41
// Vu dans MSDN
#include <stdio.h>
[event_source(native)]
class CSource {
public:
__event void MyEvent(int nValue);
};
[event_receiver(native)]
class CReceiver {
public:
void MyHandler1(int nValue) {
printf("MyHandler1 was called with value %d.\n", nValue);
}
void MyHandler2(int nValue) {
printf("MyHandler2 was called with value %d.\n", nValue);
}
void hookEvent(CSource* pSource) {
__hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler1);
__hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler2);
}
void unhookEvent(CSource* pSource) {
__unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler1);
__unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler2);
}
};
void main() {
CSource source;
CReceiver receiver;
receiver.hookEvent(&source);
__raise source.MyEvent(123);
receiver.unhookEvent(&source);
}
16 nov. 2006 à 23:30
On est pas en C# la !
Donc étant donné que c'est super interessant à utiliser dans les autres langages, c'est pour ca que je propose cela en C++.
De plus si tu regardes le fichier events.hh, ce sont egalement des pointeurs qui se cachent...
16 nov. 2006 à 15:49
un delegate C# est juste un pointeur sur une fonction...
16 nov. 2006 à 14:59
J'ai l'impression que vous n'avez pas compris que ces sources sont un exemple.
Et donc comme la majorité des choses que l'on apprend, on démarre avec des exemples très simples, où la signification concrete et la manipulation des objets n'ont pas à fatiguer l'esprit de la personne qui le lit.
Bien sur que manipuler un entier (int) au travers d'une classe est inutile.
Mais cela permet à tout le monde de se faire une idée de ce à quoi devrait ressembler le code, avant même qu'il ne l'ai lu. De plus, un entier étant une chose tellement commune, je pense que tout le monde penserait à la même implémentation (ou presque).
Bien sur que vérifier qu'un nombre est pair est très simple !
Même raison qu'au dessus.
Si j'avais pris un exemple avec mes idées loufoques (On a tous nos idées loufoques ;), non seulement il aurait fallu que vous compreniez ce qu'à la base je voulais coder et ensuite seulement la façon dont je l'ai fait, imaginé, avec les macros que je présente ici.
Pour finir, j'insiste sur le fait que j'ai justement codé quelquechose qui soit COMPLETEMENT compréhensible, à tel point qu'au final la seule chose qui importe vraiment soit la façon de l'écrire, non la façon de le penser en terme de modélisation.
J'encourage donc tout le monde à avoir recours à ce genre d'exemple, et espère que je ne suis pas seul à penser ça !
Mais puisque la remarque m'a été faite, qu'on dialogue entre gens civilisé, et que j'ai dit que j'acceptais toutes les critiques (ce qui signifie que j'étais prêt à être réactif), je vais proposer ce soir un autre exemple, réellement utile.
Il faut juste que je trouve une idée concrete, pas trop compliqué, et qui soit utile.
Si certain ont des idées d'ici ce soir ..., je suis tout ouïe !
16 nov. 2006 à 14:30
Donc un exemple plus explicite serait le bienvenue.
Mais demandons nous pourquoi cela n'a pas été implémenté dans le standart C++ à l'instar de Java et C# ?
Sinon, bonne utilisation classes, je te mets 6.
Bonne continuation...
16 nov. 2006 à 12:44
"gestion des callbacks proprement et sans prise de tête"
et tu dois encapsuler un int ?
Dans ton main, je ne vois réellement pas l'intérêt de ce que tu fais ... tu n'as pas un exemple un peu plus explicite ? parce que j'ai du mal à m'imaginer en quoi tout ton prog est mieux que
int integer = 42; std::cout << integer ;
Voilà, je suis désolé de ne pas saisir la subtilité/ utilité de ton prog ... le pire c'est que je suis sûr qu'on fond c'est pas stupide du tout :p
need explanations :'(