CALLBACK LÀ GÌ

Trong lập trình sẵn máy tính, callback là một đoạn code chạy được (hay là một hàm A) được thực hiện nlỗi tđắm say số truyền vào của hàm B như thế nào đó. Hàm A được gọi ngay mau lẹ hoặc trễ một ít sau khoản thời gian hàm B được điện thoại tư vấn. Các ngôn từ xây dựng khác nhau cung ứng callbachồng theo các giải pháp khác nhau, hay được tiến hành dưới dạng lịch trình bé, hàm nặc danh, chuỗi lệnh hoặc nhỏ trỏ hàm.

Bạn đang xem: Callback là gì


1 Thiết kế2 Cài đặt3 Ví dụ sử dụng

Thiết kế

Có hai nhiều loại callback: nhất quán (blocking callback) với không đồng bộ (asynchronous callback). Trong Khi callbaông xã đồng hóa được Điện thoại tư vấn trước lúc hàm trả về (trong ví dụ ngôn từ lập trình C dưới, hàm callbaông chồng nhất quán sống đó là hàm main), callbachồng không đồng điệu rất có thể được điện thoại tư vấn sau khi hàm trả về. Callbachồng không đồng điệu thường được sử dụng trong số làm việc vào / ra hoặc vào câu hỏi cách xử trí sự khiếu nại (event), với được gọi bằng lệnh ngắt hoặc từ những tiểu trình (thread). Callbaông xã đồng bộ thường không được áp dụng cho câu hỏi đồng nhất dữ liệu giữ lại liệu giữa những thread.

Xem thêm: Hệ Điều Hành Chrome Os Là Gì, Khác Gì So Với Laptop Windows

Callback được sử dụng những trong những công tác bao gồm sử dụng bối cảnh cửa sổ. Trong ngôi trường phù hợp này, công tác X cung ứng (1 tsay mê chiếu tới) hàm callbaông chồng Y của nó cho hệ quản lý và điều hành và khiến cho hệ điều hành quản lý Call hàm Y này, tự đó chương trình X hoàn toàn có thể bắt với giải pháp xử lý sự khiếu nại bấm vào hoặc ấn phím….(vị hệ điều hành sản xuất ra) bằng hàm Y. Vấn đề được quyên tâm ngơi nghỉ đây là quyền hạn tiến hành với tính bảo mật. Vì hàm Y của công tác X được Điện thoại tư vấn vị hệ điều hành quản lý, Y tránh việc tất cả cùng quyền lợi và nghĩa vụ với những hàm khác của khối hệ thống.

Cài đặt

Cách sản xuất cùng Call callbaông chồng siêu không giống nhau giữa những ngôn từ lập trình:

Assembly, C, C++, Pascal, Modula2 và những ngôn từ tựa như, một con trỏ hàm có thể được dùng như thể tmê mẩn số cho một hàm khác. Điều này được cung ứng vị nhiều phần trình biên dịch và có thể chấp nhận được sử dụng bên cạnh đó các ngữ điệu khác biệt mà ko đề xuất đến thư viện hoặc lớp. lấy ví dụ nhỏng Windows API rất có thể được Call trực tiếp từ khá nhiều ngôn ngữ lập trình và trình biên dịch không giống nhau.Nhiều ngữ điệu thông dịch, như thể Javascript, Lua, Pynhỏ nhắn, Perl với PHP, chất nhận được thực hiện đối tượng quan niệm hàm làm cho tham số.Trong lập trình sẵn hướng đối tượng, với ngữ điệu nhưng ko được cho phép dùng hàm có tác dụng tsi số của hàm khác như vào Java phiên phiên bản

function myFunction() document.getElementById("demo").innerHTML = "Hello World";document.getElementById("myBtn").addEventListener("click", myFunction);// Hệ điều hành và quản lý đã điện thoại tư vấn hàm callback “myFunction” Lúc sự khiếu nại nhấn vào trên element tất cả ID là “myBtn” xảy ra
#include #include void PrintTwoNumbers(int (*numberSource)(void)) printf("%d & %dn", numberSource(), numberSource());/* Hàm callbaông xã */int overNineThousand(void) return (rand() % 1000) + 9001;/* Hàm callbachồng. */int meaningOfLife(void) return 42;int main(void) PrintTwoNumbers(&rand);// Kết trái rất có thể là “125185 and 8914334”.// Hàm rand() được dùng làm cho tsay đắm số, điều này tương đương với// “printf("%d and %dn", rand(), rand());” trong hàm PrintTwoNumbers PrintTwoNumbers(&overNineThousand);// Kết trái hoàn toàn có thể là “9084 và 9441”.// Hàm overNineThousvà được dùng có tác dụng tđắm say số, vấn đề đó tương đương với// “printf("%d và %dn", overNineThous& (), overNineThousvà ());” vào hàm PrintTwoNumbers PrintTwoNumbers(&meaningOfLife);// Kết quả là “42 và 42”.// Hàm meaningOfLife được sử dụng làm tmê say số, điều đó tương tự với// “printf("%d và %dn", meaningOfLife (), meaningOfLife ());” vào hàm PrintTwoNumbers return ;
/* * This is a simple C program to lớn demonstrate the usage of callbacks * The callbaông xã function is in the same file as the calling code. * The callbaông chồng function can later be put into external library like * e.g. a shared object to increase flexibility. * */#include #include typedef struct _MyMsg int appId; char msgbody<32>; MyMsg;void myfunc(MyMsg *msg) if (strlen(msg->msgbody) > ) printf("App Id = %d nMsg = %s n",msg->appId, msg->msgbody); else printf("App Id = %d nMsg = No Msgn",msg->appId);/* * Prototype declaration */void (*callback)(MyMsg *);int main(void) MyMsg msg1; msg1.appId = 100; strcpy(msg1.msgbody, "This is a testn"); /* * Assign the address of the function "myfunc" to the function * pointer "callback" (may be also written as "callbaông xã = &myfunc;") */ callbaông xã = myfunc; /* * điện thoại tư vấn the function (may be also written as "(*callback)(&msg1);") */ callback(&msg1); return ;/* đầu ra is: App Id = 100Msg = This is a test*/
Lập trình phía sự kiệnWindows MessageLời Hotline hàm

Tmê man khảo


*
Wikitruyền thông Commons bao gồm thêm hình hình ảnh với phương tiện đi lại truyền mua về Callback.

ABAPAdaASPASPhường.NETAWKBashAssemblyCC++C#DDelphiErlangGroovyDHTMLFortranJavaJavaScriptLispLuaLotus NotesObjective-COCamlPerlPHPPL/SQLPythonRubySASsedSmalltalkTclshVisual BasicVBScriptVisual Basic for ApplicationsVB.NETSchemeHTMLXML