kesako callback...?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

kesako callback...?

Message par Torp »

Salut,

Est ce que quelqu'un pourrait donner la définition simple d'un CALLBACK? La doc de PB est assez évasive, et j'ai pas vraiment trouvé d'explication simple dans le forum...

Merci

++
_/Torp\_
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Toute création d'une fenêtre window est rattachée à une procédure permettant de traiter les évènements souris , clavier et des gadgets.

Pure simplifie la tâche de l'utilisateur avec ses commandes: event =WaitWindowEvent() , eventGadgetId() etc..; de sorte que l'utilisateur n'a pas à se préoccuper de la forme des messages reçus.

Mais il est souvent utile d'avoir accès directement à cette procédure; ce que permet : SetWindowCallback(@Callback()).

Ensuite avec la nouvelle procédure implantée: Procedure Callback(WindowID, Message, wParam, lParam), on a un accès aux différents messages grâce à ces trois variables: Message, wParam, lParam.

C'est la base de la programmation Window.
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Un Callback est un pointeur sur fonction : cela permet d'assigne une fonction à appeler en paramètre.
Exemple d'utilisation simple : imaginons que tu as une fonction permettant de lire un fichier s'appelant "LitDonne".
A la base ta fonction ne permet de lire que depuis un fichier mais ton projet grandissant, tu aimerais que l'utilisateur puisse lire depuis un flux quelconque (mémoire, réseaux, tube ...) mais ne voulant pas te prendre la tête à le faire tu décides que ce sera au programmeur voulant implémenter cette fonctionnalité de le faire. C'est la que les callbacks peuvent être utile : plutot que d'avoir une fonction figée comme :

Code : Tout sélectionner

Procedure LitDonne(fichier_a_lire.s)

    resultat = OpenFile(fichier_a_lire)
    ; blah ...

EndProcedure
Tu auras :

Code : Tout sélectionner

Procedure LitDonne(*pointeur_fonction_a_appeler.l)

    ; pseudo code     
    CallFunctionFast(*pointeur_fonction_a_appeler, param ...)

EndProcedure
Ici, ta fonction LitDonné appelera le pointeur passé en paramètre : c'est lui qui se chargera de lire le flux qu'il souhaite.
C'est un exemple bidon mais j'espère t'avoir éclairé un peu.

Pour les callbacks concernant windows, c'est un peu plus compliqué à cerner car il faut savoir comment windows gère la pile des messages mais la, c'est un autre débat (qui pourrait t'embrouiller en plus).
"Qui baise trop bouffe un poil." P. Desproges
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Message par Torp »

Merci pour vos explications.
J'avoue que ca reste encore un peu flou dans mon esprit, mais comme le dis Nico quand on a pas les bases... :?
Répondre