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

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 閱讀(556) 評論(0)  編輯 收藏 引用 所屬分類: OS
<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用鏈接

留言簿(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久久久久久久一区| 中文久久精品| 欧美在线视频网站| 麻豆91精品| 欧美激情小视频| 国产精品高潮在线| 韩国在线视频一区| 亚洲欧洲偷拍精品| 亚洲欧美区自拍先锋| 久久久一区二区三区| 亚洲成色最大综合在线| 99精品视频免费观看视频| 亚洲综合精品四区| 蜜臀av在线播放一区二区三区| 美女视频网站黄色亚洲| 欧美精品一区在线播放| 国产女人精品视频| 亚洲日本aⅴ片在线观看香蕉| 亚洲一区国产精品| 免费一级欧美片在线播放| 亚洲日本理论电影| 欧美主播一区二区三区| 欧美日韩国产区| 永久域名在线精品| 亚洲视频在线一区观看| 久热精品视频在线观看| 亚洲视频电影图片偷拍一区| 久久综合久久88| 国产麻豆成人精品| 99成人在线| 欧美二区在线观看| 久久成人免费电影| 欧美日韩综合精品| 国产精品99久久久久久久久| 在线不卡亚洲| 欧美刺激午夜性久久久久久久| 欧美日韩国产成人在线| 精品69视频一区二区三区| 亚洲一区二区在线| 亚洲国产欧美在线| 久久精品官网| 国产亚洲欧美在线| 欧美一区二区精品| 99国产精品视频免费观看| 免费亚洲婷婷| 亚洲激情社区| 欧美sm视频| 久久亚洲精品伦理| 伊人夜夜躁av伊人久久| 久久久久久久一区二区| 亚洲欧美日韩天堂| 性做久久久久久久久| 亚洲电影免费观看高清完整版在线观看 | 欧美日韩国产综合视频在线| 亚洲国产精品视频| 欧美.www| 欧美不卡福利| 一区二区三区导航| 夜夜嗨av一区二区三区四区| 欧美日韩高清不卡| 亚洲欧美精品suv| 一区二区三区 在线观看视| 欧美日韩中文精品| 性欧美精品高清| 久久黄金**| 在线日韩欧美视频| 亚洲国产综合91精品麻豆| 欧美华人在线视频| 亚洲一区二区三区在线| 亚洲欧美另类综合偷拍| 狠狠色狠狠色综合日日小说| 嫩草影视亚洲| 欧美老女人xx| 欧美在线观看你懂的| 久久午夜电影| 亚洲一区二区视频| 久久国内精品自在自线400部| 136国产福利精品导航网址| 亚洲福利视频网| 欧美色中文字幕| 久久久精品一区二区三区| 狂野欧美性猛交xxxx巴西| 一本色道久久加勒比88综合| 亚洲男人第一av网站| 在线观看欧美精品| 中文亚洲字幕| 亚洲日本aⅴ片在线观看香蕉| 亚洲一区二区在线| 91久久精品国产91久久性色| 亚洲视频在线看| 亚洲人成在线观看| 欧美专区第一页| 亚洲欧美三级伦理| 欧美国产欧美亚洲国产日韩mv天天看完整 | 乱码第一页成人| 亚洲午夜激情网页| 久久综合婷婷| 久久www成人_看片免费不卡| 亚洲高清精品中出| 一本到12不卡视频在线dvd| 韩国女主播一区| 中国成人亚色综合网站| 亚洲国产成人一区| 午夜精品福利视频| 亚洲桃色在线一区| 欧美精品大片| 免费视频一区二区三区在线观看| 欧美色另类天堂2015| 欧美69视频| 国产综合自拍| 午夜国产精品影院在线观看| 这里是久久伊人| 欧美成人影音| 欧美电影在线观看| 黄色成人在线网站| 性久久久久久久| 新片速递亚洲合集欧美合集| 欧美日韩精品免费观看视频完整| 欧美大片一区| 亚洲激情二区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美jizz19hd性欧美| 久久久久国产精品www| 国产精品户外野外| 在线综合亚洲欧美在线视频| 亚洲素人一区二区| 欧美日韩亚洲一区二区三区四区| 亚洲国产三级在线| 亚洲欧洲综合另类| 免费欧美电影| 91久久久一线二线三线品牌| 最新国产精品拍自在线播放| 猫咪成人在线观看| 亚洲高清不卡一区| 亚洲精品乱码| 欧美日韩精品综合| 亚洲网站啪啪| 久久久久久九九九九| 狠狠色综合色综合网络| 欧美在线国产精品| 久久人人97超碰国产公开结果| 国产午夜精品在线观看| 欧美一区二区三区电影在线观看| 久久精品国产综合| 亚洲第一综合天堂另类专| 美日韩在线观看| 亚洲精品小视频| 亚洲欧美在线另类| 国产精品一区二区三区久久久| 午夜精品电影| 欧美精品在线观看播放| 亚洲国产精彩中文乱码av在线播放 | 久久久美女艺术照精彩视频福利播放 | 久久米奇亚洲| 91久久精品一区二区三区| 欧美大片一区二区| 亚洲一区二区三区影院| 久久综合久久美利坚合众国| 亚洲精品一区二| 欧美午夜精品久久久| 午夜精品久久久久久久99水蜜桃 | 国产精品福利在线观看| 亚洲中无吗在线| 免费亚洲一区二区| 亚洲视频1区| 狠狠色狠狠色综合日日小说| 欧美精品一区二区三区四区| 中文亚洲视频在线| 欧美顶级少妇做爰| 欧美在线观看视频| 一区二区三区毛片| 黄色精品网站| 国产精品九九| 欧美激情视频一区二区三区免费| 香蕉久久夜色| 亚洲图片在线观看| 日韩香蕉视频| 欧美不卡视频| 久久精品网址| 亚洲欧美美女| 夜夜嗨av一区二区三区中文字幕 | 亚洲欧美日韩综合aⅴ视频| 在线欧美小视频| 国产亚洲欧美日韩一区二区| 欧美日韩在线播放一区二区| 久久亚洲春色中文字幕| 亚洲视频自拍偷拍| 亚洲激情二区| 欧美夫妇交换俱乐部在线观看| 久久国产婷婷国产香蕉| 亚洲一区自拍| 中文一区在线|