青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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 閱讀(567) 評論(0)  編輯 收藏 引用 所屬分類: OS
<2010年12月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(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

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美日韩一区二区三区在线观看| 亚洲欧美日本国产专区一区| 99国产精品久久久久久久| 欧美国产三区| 亚洲作爱视频| 久久精品色图| 亚洲大胆人体视频| 欧美日韩福利| 亚洲欧美日韩中文播放| 六月天综合网| 一区二区成人精品| 国产欧美日韩综合一区在线观看 | 亚洲欧美日韩精品久久久久| 久久婷婷影院| 一区二区三区欧美视频| 国产视频自拍一区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲精品在线免费| 久久激情五月丁香伊人| 亚洲九九精品| 国产主播精品| 欧美极品aⅴ影院| 性8sex亚洲区入口| 亚洲国产精品高清久久久| 欧美亚洲一区| 亚洲日本欧美在线| 国产日韩欧美一二三区| 欧美高清成人| 久久高清一区| 亚洲五月六月| 亚洲激情影视| 麻豆精品视频在线观看视频| 亚洲手机视频| 亚洲人体大胆视频| 国产有码一区二区| 欧美三级黄美女| 久久久噜噜噜久久狠狠50岁| 一区二区三区黄色| 亚洲电影第1页| 久久久天天操| 午夜精品在线看| 99国产麻豆精品| 在线观看欧美亚洲| 国产农村妇女精品| 欧美日韩中国免费专区在线看| 久久亚洲国产精品日日av夜夜| 亚洲一区二区三区在线观看视频| 亚洲国内自拍| 欧美黄色免费网站| 免费不卡视频| 久久蜜桃资源一区二区老牛 | 欧美中文字幕视频在线观看| 99热精品在线观看| 亚洲韩国青草视频| 欧美大成色www永久网站婷| 久久精品国产第一区二区三区最新章节| 亚洲深夜福利视频| 99精品国产高清一区二区| 亚洲日本精品国产第一区| 禁久久精品乱码| 国产在线视频欧美| 国产欧美婷婷中文| 国产日韩精品久久久| 国产精品天天看| 国产精品免费一区二区三区在线观看 | 久久大逼视频| 羞羞色国产精品| 亚洲男人的天堂在线aⅴ视频| 在线视频欧美日韩精品| av72成人在线| 一区二区三区国产在线| 一区二区三区视频在线播放| 一本大道av伊人久久综合| 99精品视频一区| 亚洲素人在线| 亚洲综合久久久久| 欧美一级视频| 久久久久久久精| 久久综合中文| 亚洲电影视频在线| 亚洲黄色影片| 一本色道久久88综合日韩精品| 一本色道久久综合| 亚洲一区不卡| 久久岛国电影| 欧美不卡视频一区发布| 欧美电影在线免费观看网站 | 国产精品青草综合久久久久99| 国产精品久久久久久久久久久久久| 欧美色图一区二区三区| 国产精品美女一区二区在线观看| 国产精品一区二区欧美| 国产自产v一区二区三区c| 亚洲第一天堂av| 99国产精品自拍| 午夜精品久久久久影视| 久久精品毛片| 欧美激情麻豆| 亚洲精品在线观| 亚洲欧美福利一区二区| 久久亚洲综合网| 欧美日韩一区二区免费在线观看 | 韩国福利一区| 亚洲精品国产欧美| 亚洲综合电影| 鲁鲁狠狠狠7777一区二区| 亚洲人成网站精品片在线观看 | 久久精品国产99国产精品澳门| 玖玖综合伊人| 国产精品久久二区| 136国产福利精品导航网址应用| 99re热这里只有精品视频| 久久疯狂做爰流白浆xx| 亚洲高清久久| 午夜欧美不卡精品aaaaa| 欧美成人免费全部观看天天性色| 国产精品劲爆视频| 亚洲精品国产精品久久清纯直播 | 久久先锋影音av| 欧美网站在线观看| 亚洲承认在线| 久久aⅴ国产欧美74aaa| 亚洲精选在线观看| 久久福利毛片| 国产精品美女www爽爽爽| 亚洲欧洲一区二区三区| 久久精品国产综合| 99国产精品私拍| 欧美刺激性大交免费视频| 国产色爱av资源综合区| 亚洲香蕉网站| 亚洲激情图片小说视频| 久久影院午夜论| 亚洲人成网在线播放| 国产综合色在线| 一区二区三区|亚洲午夜| 久久久久久久久久看片| 亚洲午夜激情| 欧美日韩另类在线| 亚洲精品免费在线| 久久影音先锋| 亚洲欧美日韩一区在线| 欧美色图五月天| 这里只有精品视频在线| 亚洲福利免费| 免费不卡在线观看av| 一区二区在线观看视频| 久久精品亚洲一区二区| 亚洲综合精品四区| 国产精品久久久久久久久久免费看| 一区二区三区欧美视频| 亚洲人www| 欧美精品二区| 亚洲精品网站在线播放gif| 欧美激情在线狂野欧美精品| 久久久视频精品| 伊人狠狠色j香婷婷综合| 久久久精品久久久久| 欧美在线观看你懂的| 国产一区三区三区| 久久婷婷人人澡人人喊人人爽| 欧美亚洲一级| 国内精品久久久久久久97牛牛| 久久九九99| 久久久久国产精品www| 在线欧美一区| 亚洲国产欧美不卡在线观看| 欧美电影资源| 亚洲手机在线| 亚洲欧美日产图| 国产午夜精品久久久久久久| 久久精品日产第一区二区三区| 久久精品99无色码中文字幕| 韩日欧美一区二区三区| 欧美承认网站| 欧美日韩一区二区在线视频 | 亚洲精品综合在线| 亚洲人成网站色ww在线| 欧美日韩亚洲天堂| 欧美一区二区三区四区高清| 欧美在线观看视频| 伊人久久婷婷色综合98网| 牛牛国产精品| 欧美日韩一本到| 久久激情婷婷| 欧美aⅴ一区二区三区视频| 99视频一区二区| 亚洲一区在线视频| 极品尤物一区二区三区| 亚洲激情成人在线| 国产精品剧情在线亚洲| 久久性色av| 欧美理论大片| 久久国产天堂福利天堂| 免费久久99精品国产自在现线| 一区二区三区免费网站| 性欧美大战久久久久久久久| 亚洲娇小video精品| 亚洲午夜精品网| 在线日韩一区二区|