• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 297,  comments - 15,  trackbacks - 0

            Callback (computer science)

            From Wikipedia, the free encyclopedia

            Jump to: navigation, search

            In computer programming, a callback is executable code that is passed as an argument to other code. It allows a lower-level software layer to call a subroutine (or function) defined in a higher-level layer.

            A callback is often back on the level of the original caller.

            However, while technically accurate, this might not be the most illustrative explanation. Think of it as an "In case of fire, break glass" subroutine. Many computer programs tend to be written such that they expect a certain set of possibilities at any given moment. If "Thing That Was Expected", then "Do something", otherwise, "Do something else." is a common theme. However, there are many situations in which events (such as fire) could happen at any time. Rather than checking for them at each possible step ("Thing that was expected OR Things are on fire"), it is easier to have a system which detects a number of events, and will call the appropriate function upon said event (this also keeps us from having to write programs like "Thing that was expected OR Things are on fire OR Nuclear meltdown OR alien invasion OR the dead rising from the grave OR...etc., etc.) Instead, a callback routine is a sort of insurance policy. If zombies attack, call this function. If the user moves their mouse over an icon, call HighlightIcon, and so forth.

            Usually, there is a framework in which a series of events (some condition is met) in which the running framework (be it a generic library or unique to the program) will call a registered chunk of code based on some pre-registered function (typically, a handle or a function pointer) The events may be anything from user input (such as mouse or keyboard input), network activity (callbacks are frequently used as message handlers for new network sessions) or an internal operating system event (such as a POSIX-style signal) The concept is to develop a piece of code that can be registered within some framework (be it a GUI toolkit, network library, etc.) that will serve as the handler upon the condition stated at registration. How the flow of control is passed between the underlying framework and the registered callback function is specific to the framework itself.

            In another common scenario, the callback is first registered and later called asynchronously.

            Contents

            [hide]

            [edit] Motivation

            To understand the motivation for using callbacks, consider the problem of a network server. At any given point in time, it may have an internal state machine that is currently at a point in which it is dealing with one very specific communication session, not necessarily expecting new participants. As a host, it could be dealing with all the name exchange and handshakes and pleasantries, but no real way of dealing with the next dinner party guest that walks through the door. One way to deal with this is for this server to live by a state machine in which it rejects new connections until the current one is dealt with...not very robust (What if the other end goes away unexpectedly?) and not very scalable (Would you really want to make other clients wait (or more likely, keep retrying to connect) until it's their turn?) Instead, it's easier to have some sort of management process that spins off a new thread (or process) to deal with the new connection. Rather than writing programs that keep dealing with all of the possible resource contention problems that could come of this, or all of the details involved in socket code (your desired platform may be more straight-forward than others, but one of your design goals may be cross-platform compatibility), many have opted to use more generic frameworks that will handle such details in exchange for providing a reference such that the underlying framework can call it if the registered event occurs.

            [edit] Example

            The following code in C demonstrates the use of callbacks for the specific case of dealing with a POSIX-style signal (in this case SIGUSR1).

            #include <stdio.h>
            #include <signal.h>
            void * sig(int signum)
            {
            printf("Received signal number %d!\n", signum);
            }
            int main(int argc, char *argv[])
            {
            signal(SIGUSR1,&sig);
            while(1){};
            return 0;
            }
            

            The while loop will keep this example from doing anything interesting, but it will give you plenty of time to send a signal to this process. (If you're on a unix-like system, try a "kill -USR1 <pid>" to the process ID associated with this sample program. No matter how or when you send it, the callback should respond.)

            [edit] Implementation

            The form of a callback varies among programming languages.

            • C and C++ allow function pointers as arguments to other functions.
            • Several programming languages (though especially functional programming languages such as Scheme or ML) allow closures, a generalization of function pointers, as arguments to other functions.
            • Several programming languages, especially interpreted languages, allow one to pass the name of a function A as a parameter to a function B and have B call A by means of eval.
            • In object-oriented programming languages, a call can accept an object that implements some abstract interface, without specifying in detail how the object should do so. The programmer who implements that object may use the interface's methods exclusively for application-specific code. Such objects are effectively a bundle of callbacks, plus the data they need to manipulate. They are useful in implementing various design patterns like Visitor, Observer, and Strategy.
            • C++ allows objects to provide their own implementation of the function call operation. The Standard Template Library accepts these objects (called functors), as well as function pointers, as parameters to various polymorphic algorithms
            • C# .NET Framework provides a type-safe encapsulating reference, a 'delegate', to manage function pointers. These can be used for callback operations.
            • Perl supports subroutine references.[1][2]
            • Some systems have built-in programming languages to support extension and adaptation. These languages provide callbacks without the need for separate software development tools.

            [edit] Special cases

            Callback functions are also frequently used as a means to handle exceptions arising within the low level function, as a way to enable side-effects in response to some condition, or as a way to gather operational statistics in the course of a larger computation. Interrupt handlers in an operating system respond to hardware conditions, signal handlers of a process are triggered by the operating system, and event handlers process the asynchronous input a program receives.

            A pure callback function is one which is purely functional (always returns the same value given the same inputs) and free of observable side-effects. Some uses of callbacks require pure callback functions to operate correctly.

            A special case of a callback is called a predicate callback, or just predicate for short. This is a pure callback function which accepts a single input value and returns a Boolean value. These types of callbacks are useful for filtering collections of values by some condition.

            [edit] See also

            [edit] External links

            [edit] References

            posted on 2009-05-12 23:28 chatler 閱讀(547) 評論(0)  編輯 收藏 引用 所屬分類: OS
            <2009年5月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            精品久久久久久无码不卡| 日韩欧美亚洲综合久久影院Ds| 久久人人爽人人爽人人片AV东京热| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 国产精品久久久久久久久| 91精品国产91久久| 久久乐国产综合亚洲精品| 久久久久免费看成人影片| 国产亚州精品女人久久久久久 | 午夜久久久久久禁播电影| 66精品综合久久久久久久| 97精品伊人久久大香线蕉| 久久电影网2021| 亚洲精品白浆高清久久久久久 | 国产产无码乱码精品久久鸭| 久久精品综合一区二区三区| 久久久久无码精品国产不卡| 久久人妻少妇嫩草AV蜜桃| 青青草国产精品久久久久| 亚洲精品乱码久久久久久按摩| 国产精品日韩深夜福利久久| 欧洲成人午夜精品无码区久久| 亚洲精品国精品久久99热| 久久99精品国产99久久6| 国内精品伊人久久久久av一坑 | 狠色狠色狠狠色综合久久| 国产亚洲美女精品久久久2020| 欧美精品丝袜久久久中文字幕| 久久美女人爽女人爽| 精品久久人妻av中文字幕| 欧美午夜精品久久久久免费视| 国产69精品久久久久观看软件| 色综合久久久久综合99| 久久综合久久性久99毛片| 久久久久国产精品嫩草影院| 国产精品美女久久久网AV| 999久久久国产精品| 成人精品一区二区久久久| 日韩精品久久久久久| 国产精品成人99久久久久91gav| 国产免费久久久久久无码|