السلام عليكم و رحمة الله و بركاته
حاولت فهم callback function لكن لم أستطع لا أعرف لماذا، أريد أن أعرف الفائدة منها بالضبط و كيف يمكن إستخدامها في السي، قرأت بعض الأمثلة فكدت أن أنسى حتى عن ماذا أبحث :D.
السلام عليكم و رحمة الله و بركاته
حاولت فهم callback function لكن لم أستطع لا أعرف لماذا، أريد أن أعرف الفائدة منها بالضبط و كيف يمكن إستخدامها في السي، قرأت بعض الأمثلة فكدت أن أنسى حتى عن ماذا أبحث :D.
''اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل بلية''
'اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء منهم و الأموات'
www.it-scoop.com
وعليكم السلام ورحمة الله وبركاته ،
دالة 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;
}
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
هل يمكن تمريرها على شكل مرجع مثل هذا المثال:
if (libssh2_userauth_keyboard_interactive(session, username, &kbd_callback) ) {وهذا رابط للمثال كاملا:http://www.libssh2.org/examples/ssh2.html
''اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل بلية''
'اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء منهم و الأموات'
www.it-scoop.com