الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ماهية callback function

بدأه SIFE في 29 أكتوبر 2010 · 2 رد · 515 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

حاولت فهم callback function لكن لم أستطع لا أعرف لماذا، أريد أن أعرف الفائدة منها بالضبط و كيف يمكن إستخدامها في السي، قرأت بعض الأمثلة فكدت أن أنسى حتى عن ماذا أبحث :D.

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#2

وعليكم السلام ورحمة الله وبركاته ،

دالة callback ، مجرد دالة تستدعيها عند حدوث حدث معين ، مثلاً / كلما تحركت الفأرة ، استدعي الدالة motionFunc التي تطبع إحداثيات الفأرة . أو كلما نقرت على لوحة المفاتيح ، استدعِ الدالة keyboardFunc التي تطبع الحرف المضغوط . أو عند عمل Loop ، كلما وجدت كلمة تبدأ بحرف small ، استدع الدالة upperCase ، التي تحوّل الكلمة إلى حرف صغير ، وكلما وجدت كلمة تبدأ بكلمة Capital ، استدعِ الدالة lowerCase ،

في الغالب ، أفضل طريقة في لغة سي ، أن تعمل register لأي دالة عبارة عن callback قبل حدوث الحدث ، وفي قلب المكتبة أو البرنامج / عند حدوث أي حدث ، سيجد البرنامج الدالة التي يجب أن يستدعيها ..

في لغة سي ، يستخدمون مفهوم function pointer ، مثال بسيط :

#include <stdio.h>
#include <stdlib.h>

void mouseCallback(int x,int y)
{
    printf("x: %d, y:%d ",x,y);
}

void executeCallback(int dummy,void (*MOUSE_FUNCTION)(int ,int))
{
    if(dummy == 0)
        MOUSE_FUNCTION(100,200);

}
int main()
{
    executeCallback(0,mouseCallback);
    return 0;
}

مثال آخر ، أكثر واقعية ..

#include <stdio.h>
#include <stdlib.h>

/******** CODE IN EXTERNAL LIBRARY ************/
typedef void (*MOUSE_FUNCTION)(int ,int);
typedef void (*KEYBOARD_FUNCTION)(int);

MOUSE_FUNCTION currentMouseFunction ;
KEYBOARD_FUNCTION currentKeyboardFunction ;

void registerMouseFunc(MOUSE_FUNCTION function)
{
    currentMouseFunction = function;
}

void registerKeyboardFunc(KEYBOARD_FUNCTION function)
{
        currentKeyboardFunction = function;
}

void executeEvent()
{
    currentMouseFunction(10,20);
    currentKeyboardFunction(13);

}
/******** END ************/



/********* MY PROGRAM **********/
void mouseCallback(int x,int y)
{
    printf("x: %d, y:%d \n\n",x,y);
}

void keyboardCallback(int b)
{
    printf("button: %d \n\n",b);
}


int main()
{
    registerMouseFunc(mouseCallback);
    registerKeyboardFunc(keyboardCallback);

    executeEvent();
    return 0;
}
2

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

هل يمكن تمريرها على شكل مرجع مثل هذا المثال:

if (libssh2_userauth_keyboard_interactive(session, username, &kbd_callback) ) {

وهذا رابط للمثال كاملا:http://www.libssh2.org/examples/ssh2.html

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

مواضيع مشابهة