ï»?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ‹¹Žå—软äšgå¼€å‘公忀¹‹C++回调函数用法-‹¹Žå—软äšgå¼€å‘|å±×ƒ¸œè½¯äšgå¼€å?‹¹Žå—èµ¢å¯d¿U‘技软äšgå¼€å‘å…¬å?/title> <meta name="keywords" content="‹¹Žå—软äšgå¼€å‘公忀¹‹C++回调函数用法"/> <meta name="description" content="一回调函数我们¾l常在C++设计旉™€šè¿‡ä½¿ç”¨å›žè°ƒå‡½æ•°å¯ä»¥ä½¿æœ‰äº›åº”用(如定时器事äšg回调处ç†ã€ç”¨å›žè°ƒå‡½æ•°è®°å½•æŸæ“作进度等åQ‰å˜å¾—éžå¸¸æ–¹ä¾¿å’Œ½W¦åˆé€»è¾‘åQŒé‚£ä¹ˆå®ƒçš„内在机制如何呢åQŒæ€Žä¹ˆå®šä¹‰å‘?它和其它函数åQˆæ¯”如钩å­å‡½æ•ŽÍ¼‰æœ‰ä½•ä¸åŒ"/> <link href="/css/style.css" rel="stylesheet" type="text/css" /> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> </head> <body> <div style="position:fixed;left:-9000px;top:-9000px;"><wbr id="vebt5"><option id="vebt5"><var id="vebt5"><p id="vebt5"></p></var></option></wbr><listing id="vebt5"><object id="vebt5"><nobr id="vebt5"></nobr></object></listing><ol id="vebt5"></ol><pre id="vebt5"><em id="vebt5"><input id="vebt5"></input></em></pre><form id="vebt5"><big id="vebt5"><li id="vebt5"></li></big></form><pre id="vebt5"><em id="vebt5"><kbd id="vebt5"><label id="vebt5"></label></kbd></em></pre><mark id="vebt5"></mark><legend id="vebt5"></legend><noscript id="vebt5"></noscript><div id="vebt5"></div><center id="vebt5"><small id="vebt5"><track id="vebt5"><rp id="vebt5"></rp></track></small></center><tr id="vebt5"><option id="vebt5"><acronym id="vebt5"></acronym></option></tr><track id="vebt5"></track><tt id="vebt5"></tt><track id="vebt5"><form id="vebt5"><pre id="vebt5"><em id="vebt5"></em></pre></form></track><wbr id="vebt5"></wbr><nav id="vebt5"><blockquote id="vebt5"><dd id="vebt5"></dd></blockquote></nav><noscript id="vebt5"></noscript><mark id="vebt5"></mark><div id="vebt5"><menuitem id="vebt5"><wbr id="vebt5"></wbr></menuitem></div><menu id="vebt5"><samp id="vebt5"><meter id="vebt5"><dfn id="vebt5"></dfn></meter></samp></menu><kbd id="vebt5"></kbd><track id="vebt5"><form id="vebt5"><source id="vebt5"></source></form></track><u id="vebt5"></u><var id="vebt5"><cite id="vebt5"><div id="vebt5"></div></cite></var><track id="vebt5"><form id="vebt5"><u id="vebt5"></u></form></track><option id="vebt5"></option><samp id="vebt5"></samp><address id="vebt5"></address><samp id="vebt5"></samp><noframes id="vebt5"></noframes><strong id="vebt5"></strong><progress id="vebt5"><kbd id="vebt5"><div id="vebt5"></div></kbd></progress><s id="vebt5"></s><ins id="vebt5"></ins><table id="vebt5"><strong id="vebt5"><noframes id="vebt5"></noframes></strong></table><listing id="vebt5"></listing><bdo id="vebt5"><nav id="vebt5"><table id="vebt5"><span id="vebt5"></span></table></nav></bdo><samp id="vebt5"></samp><strike id="vebt5"><video id="vebt5"><samp id="vebt5"></samp></video></strike><ruby id="vebt5"></ruby><optgroup id="vebt5"></optgroup><option id="vebt5"><wbr id="vebt5"><p id="vebt5"><rp id="vebt5"></rp></p></wbr></option><sup id="vebt5"><acronym id="vebt5"><tt id="vebt5"><dfn id="vebt5"></dfn></tt></acronym></sup><progress id="vebt5"></progress><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"><dl id="vebt5"></dl></legend></table></tbody><ins id="vebt5"></ins><code id="vebt5"><menu id="vebt5"><sub id="vebt5"><meter id="vebt5"></meter></sub></menu></code><listing id="vebt5"><div id="vebt5"><center id="vebt5"><wbr id="vebt5"></wbr></center></div></listing><dfn id="vebt5"></dfn> <table id="vebt5"><span id="vebt5"><dl id="vebt5"><object id="vebt5"></object></dl></span></table><form id="vebt5"><code id="vebt5"><em id="vebt5"></em></code></form><xmp id="vebt5"></xmp><cite id="vebt5"><div id="vebt5"><code id="vebt5"><em id="vebt5"></em></code></div></cite><address id="vebt5"></address><meter id="vebt5"><source id="vebt5"><table id="vebt5"><ruby id="vebt5"></ruby></table></source></meter><dfn id="vebt5"><option id="vebt5"><dd id="vebt5"><p id="vebt5"></p></dd></option></dfn><strike id="vebt5"></strike><b id="vebt5"></b><kbd id="vebt5"></kbd><sup id="vebt5"><acronym id="vebt5"><delect id="vebt5"><b id="vebt5"></b></delect></acronym></sup><cite id="vebt5"><xmp id="vebt5"><center id="vebt5"><small id="vebt5"></small></center></xmp></cite><optgroup id="vebt5"><xmp id="vebt5"><center id="vebt5"></center></xmp></optgroup><ol id="vebt5"></ol><u id="vebt5"><s id="vebt5"><cite id="vebt5"><ins id="vebt5"></ins></cite></s></u><rp id="vebt5"></rp><dl id="vebt5"></dl><em id="vebt5"></em><big id="vebt5"></big><code id="vebt5"><i id="vebt5"><optgroup id="vebt5"></optgroup></i></code><rp id="vebt5"><big id="vebt5"><s id="vebt5"></s></big></rp><track id="vebt5"><form id="vebt5"><u id="vebt5"></u></form></track><dd id="vebt5"><bdo id="vebt5"><tbody id="vebt5"><table id="vebt5"></table></tbody></bdo></dd><dl id="vebt5"></dl><tr id="vebt5"><option id="vebt5"><acronym id="vebt5"></acronym></option></tr><pre id="vebt5"></pre><center id="vebt5"><small id="vebt5"><track id="vebt5"><rp id="vebt5"></rp></track></small></center><video id="vebt5"></video><dfn id="vebt5"></dfn><dd id="vebt5"><bdo id="vebt5"><th id="vebt5"><address id="vebt5"></address></th></bdo></dd><cite id="vebt5"></cite><center id="vebt5"><small id="vebt5"><noscript id="vebt5"></noscript></small></center><meter id="vebt5"></meter><strong id="vebt5"><input id="vebt5"><th id="vebt5"></th></input></strong><nobr id="vebt5"></nobr><dfn id="vebt5"><font id="vebt5"><dd id="vebt5"></dd></font></dfn><dd id="vebt5"><bdo id="vebt5"><tbody id="vebt5"><video id="vebt5"></video></tbody></bdo></dd><mark id="vebt5"><bdo id="vebt5"><b id="vebt5"><table id="vebt5"></table></b></bdo></mark><output id="vebt5"><ol id="vebt5"><bdo id="vebt5"></bdo></ol></output><strong id="vebt5"><track id="vebt5"><nav id="vebt5"><pre id="vebt5"></pre></nav></track></strong><thead id="vebt5"></thead><mark id="vebt5"><td id="vebt5"><tbody id="vebt5"><video id="vebt5"></video></tbody></td></mark><p id="vebt5"></p><ins id="vebt5"></ins><form id="vebt5"></form><span id="vebt5"><tt id="vebt5"><object id="vebt5"><font id="vebt5"></font></object></tt></span><delect id="vebt5"><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"></legend></table></tbody></delect><optgroup id="vebt5"></optgroup><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"></legend></table></tbody><big id="vebt5"></big> <ruby id="vebt5"></ruby><bdo id="vebt5"><tbody id="vebt5"><table id="vebt5"><span id="vebt5"></span></table></tbody></bdo><b id="vebt5"><output id="vebt5"><dd id="vebt5"></dd></output></b><listing id="vebt5"><ins id="vebt5"><center id="vebt5"></center></ins></listing><table id="vebt5"><strong id="vebt5"><noframes id="vebt5"><th id="vebt5"></th></noframes></strong></table><em id="vebt5"></em><strike id="vebt5"><menu id="vebt5"><samp id="vebt5"><meter id="vebt5"></meter></samp></menu></strike><i id="vebt5"><span id="vebt5"><tt id="vebt5"></tt></span></i><pre id="vebt5"><strong id="vebt5"><input id="vebt5"><thead id="vebt5"></thead></input></strong></pre><ins id="vebt5"></ins><nobr id="vebt5"><sub id="vebt5"><button id="vebt5"></button></sub></nobr><acronym id="vebt5"><tt id="vebt5"><dfn id="vebt5"><font id="vebt5"></font></dfn></tt></acronym><nobr id="vebt5"><mark id="vebt5"><td id="vebt5"><dfn id="vebt5"></dfn></td></mark></nobr><track id="vebt5"></track><dl id="vebt5"><code id="vebt5"><sup id="vebt5"><sub id="vebt5"></sub></sup></code></dl><del id="vebt5"></del><track id="vebt5"></track><video id="vebt5"></video><ol id="vebt5"></ol><track id="vebt5"></track><th id="vebt5"><menuitem id="vebt5"><wbr id="vebt5"><listing id="vebt5"></listing></wbr></menuitem></th><del id="vebt5"></del><sub id="vebt5"></sub><big id="vebt5"></big><b id="vebt5"></b><address id="vebt5"><progress id="vebt5"><noscript id="vebt5"></noscript></progress></address><del id="vebt5"><i id="vebt5"><optgroup id="vebt5"></optgroup></i></del><delect id="vebt5"></delect><dl id="vebt5"></dl><li id="vebt5"></li><tr id="vebt5"><option id="vebt5"><ol id="vebt5"><delect id="vebt5"></delect></ol></option></tr><th id="vebt5"><address id="vebt5"><wbr id="vebt5"><rt id="vebt5"></rt></wbr></address></th><strike id="vebt5"></strike><strike id="vebt5"></strike><noscript id="vebt5"></noscript><p id="vebt5"></p><dl id="vebt5"></dl><progress id="vebt5"><rt id="vebt5"><th id="vebt5"></th></rt></progress><tt id="vebt5"><object id="vebt5"><menu id="vebt5"><sub id="vebt5"></sub></menu></object></tt><menu id="vebt5"></menu><span id="vebt5"><noframes id="vebt5"><tr id="vebt5"></tr></noframes></span><form id="vebt5"></form><video id="vebt5"><span id="vebt5"><tt id="vebt5"></tt></span></video><b id="vebt5"></b><video id="vebt5"></video><center id="vebt5"><small id="vebt5"><noscript id="vebt5"><div id="vebt5"></div></noscript></small></center><cite id="vebt5"><xmp id="vebt5"><code id="vebt5"><small id="vebt5"></small></code></xmp></cite><pre id="vebt5"></pre><i id="vebt5"><ruby id="vebt5"><tt id="vebt5"></tt></ruby></i><font id="vebt5"><mark id="vebt5"><td id="vebt5"></td></mark></font></div> <div class="head"> <div class="top"><span><a href="/html/sitemap.xml">XML</a> | <a href="/html/sitemap.html">HTML</a> | <a href="/sitemap.txt">TXT</a></span></div> <div class="bank"> <div class="logo"> <h1><strong><a href="http://www.cabanatime.com" style="margin-right:10px">‹¹Žå—软äšgå¼€å?/a></strong><strong><a href="http://www.cabanatime.com">å±×ƒ¸œè½¯äšgå¼€å?/a></strong></h1> </div> <div class="contact-top"></div> </div> <div class="menu"> <ul> <li><a href="/">é¦?#160;   ™å?/a></li> <li><a href="/About/">关于我们</a></li> <li><a href="/Advantage/">å¼€å‘优åŠ?/a></li> <li><a href="/Products/">产å“展示</a></li> <li><a href="/Cooperation/">åˆä½œä¼ä¸š</a></li> <li><a href="/News/">新闻动æ€?/a></li> <li><a href="/Contact/">è”系我们</a></li> </ul> </div> <div class="banner"><img src="/images/banner.jpg" width="1000" height="341"/></div> </div> <div id="position"><div>您当å‰ä½¾|®ï¼š<a href="/">软äšgå¼€å?/a> >> <a href="/News/">新闻动æ€?/a> >> <a href="/News/Technology/">软äšg开呿Ѐæœ?/a> >> ‹¹è§ˆæ–‡ç« </div></div> <div class="youshi_f1" id="youshi_tdyx"> <div class="youshi01"> <h1 class="article_title">‹¹Žå—软äšgå¼€å‘公忀¹‹C++回调函数用法</h1> <div class="article_author">æ·ÕdŠ æ—‰™—´åQ?016-12-20 17:03:49 文章作者:<a href="/">‹¹Žå—软äšgå¼€å?/a> ‹¹è§ˆ‹Æ¡æ•°åQ?Script Language="Javascript" Src="/item/GetHits.asp?Action=Count&GetFlag=0&m=1&ID=3055"></Script></div> <div class="article_main"><div id="MyContent"><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">一回调函数</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  我们¾l常在C++设计旉™€šè¿‡ä½¿ç”¨å›žè°ƒå‡½æ•°å¯ä»¥ä½¿æœ‰äº›åº”用(如定时器事äšg回调处ç†ã€ç”¨å›žè°ƒå‡½æ•°è®°å½•æŸæ“作进度等åQ‰å˜å¾—éžå¸¸æ–¹ä¾¿å’Œ½W¦åˆé€»è¾‘åQŒé‚£ä¹ˆå®ƒçš„内在机制如何呢åQŒæ€Žä¹ˆå®šä¹‰å‘?它和其它函数åQˆæ¯”如钩å­å‡½æ•ŽÍ¼‰æœ‰ä½•ä¸åŒå‘¢ï¼Ÿ</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  使用回调函数实际上就是在调用æŸä¸ªå‡½æ•°åQˆé€šå¸¸æ˜¯API函数åQ‰æ—¶åQŒå°†è‡ªå·±çš„一个函敎ͼˆ˜q™ä¸ªå‡½æ•°ä¸ºå›žè°ƒå‡½æ•ŽÍ¼‰çš„地å€ä½œäØ“å‚æ•°ä¼ é€’给那个函数ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  è€?那个函数在需è¦çš„æ—¶å€™ï¼Œåˆ©ç”¨ä¼ é€’的地å€è°ƒç”¨å›žè°ƒå‡½æ•°åQŒè¿™æ—¶ä½ å¯ä»¥åˆ©ç”¨˜q™ä¸ªæœÞZ¼šåœ¨å›žè°ƒå‡½æ•îC¸­å¤„ç†æ¶ˆæ¯æˆ–完æˆä¸€å®šçš„æ“ä½œã€‚è‡³äºŽå¦‚ä½•å®šä¹‰å›žè°ƒå‡½æ•ŽÍ¼Œè·Ÿå…·ä½“ä‹É用的 API函数有关åQŒä¸€èˆ¬åœ¨å¸®åŠ©ä¸­æœ‰è¯´æ˜Žå›žè°ƒå‡½æ•°çš„å‚æ•°å’Œ˜q”回值等。C++ä¸­ä¸€èˆ¬è¦æ±‚在回调函数å‰åŠ CALLBACKåQˆç›¸å½“于FAR PASCALåQ‰ï¼Œ˜q™ä¸»è¦æ˜¯è¯´æ˜Žè¯¥å‡½æ•°çš„调用方å¼ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  至于钩å­å‡½æ•°åQŒåªæ˜¯å›žè°ƒå‡½æ•°çš„一个特例。习惯上把与SetWindowsHookEx函数一起ä‹É用的回调函数¿UîCؓ钩å­å‡½æ•°ã€‚也有äh把利用VirtualQueryEx安装的函数称为钩å­å‡½æ•ŽÍ¼Œä¸è¿‡˜q™ç§å«æ³•ä¸å¤ª‹¹è¡Œã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  也å¯ä»¥è¿™æ øP¼Œæ›´å®¹æ˜“ç†è§£ï¼šå›žè°ƒå‡½æ•°ž®±å¥½åƒæ˜¯ä¸€ä¸ªä¸­æ–­å¤„ç†å‡½æ•ŽÍ¼Œ¾pÈ»Ÿåœ¨ç¬¦åˆä½ è®‘Ö®šçš„æ¡ä»¶æ—¶è‡ªåŠ¨è°ƒç”¨ã€‚äØ“æ­¤ï¼Œä½ éœ€è¦åšä¸‰äšg事:</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  1. 声明åQ?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  2. 定义åQ?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  3. 讄¡½®è§¦å‘æ¡äšgåQŒå°±æ˜¯åœ¨ä½ çš„函数中把你的回调函数å称转化为地å€ä½œäØ“ä¸€ä¸ªå‚æ•ŽÍ¼Œä»¥ä¾¿äºŽç³»¾lŸè°ƒç”¨ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  声明和定义时应注æ„:回调函数ç”Þq³»¾lŸè°ƒç”¨ï¼Œæ‰€ä»¥å¯ä»¥è®¤ä¸ºå®ƒå±žäºŽWINDOWS¾pÈ»ŸåQŒä¸è¦æŠŠå®ƒå½“作你的æŸä¸ªç±»çš„æˆå‘˜å‡½æ•°ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">ã€€ã€€äºŒå›žè°ƒå‡½æ•°ã€æ¶ˆæ¯å’Œäº‹äšg例程</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  调用(calling)机制从汇¾~–时代è“vå·²ç»å¤§é‡ä½¿ç”¨åQšå‡†å¤‡ä¸€ŒD늎°æˆçš„代ç åQŒè°ƒç”¨è€…å¯ä»¥éšæ—¶èŸ©è½¬è‡³æ­¤æ®µä»£ç çš„è“v始地å€åQŒæ‰§è¡Œå®ŒåŽå†˜q”回跌™{æ—¶çš„åŽç®‹åœ°å€ã€?CPU为此准备了现æˆçš„调用指ä×oåQŒè°ƒç”¨æ—¶å¯ä»¥åŽ‹æ ˆä¿æŠ¤çŽ°åœºåQŒè°ƒç”¨ç»“æŸåŽä»Žå †æ ˆä¸­å¼¹å‡ºçŽ°åœºåœ°å€åQŒä»¥ä¾¿è‡ªåŠ¨è¿”å›žã€‚å€Ÿå †æ ˆä¿æŠ¤çŽ°åœºçœŸæ˜¯ä¸€™å¹ç»å¦™çš„呿˜ŽåQŒå®ƒä½¿è°ƒç”?者和被调者å¯ä»¥äº’ä¸ç›¸è¯†ï¼ŒäºŽæ˜¯æ‰æœ‰äº†åŽæ¥çš„函数和构件ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">æ­¤è°ƒç”¨æœºåˆ¶åÆˆéžå®Œ¾ŸŽã€‚回调函数就是一例。函æ•îC¹‹¾cÀLœ¬æ˜¯äؓ调用者准备的¾ŸŽé¤åQŒå…¶çƒ¹åˆ¶è€…应寚w£Ÿå®¢äº†å¦‚æŒ‡æŽŒï¼Œä½†å®žæƒ…åÆˆéžå¦‚此。例如,写一个快速排åºå‡½æ•îC¾›ä»–ähè°?ç”¨ï¼Œå…¶ä¸­å¿…åŒ…å«æ¯”较大ž®ã€‚麻烦æ¥äº†ï¼šæ­¤æ—¶òq¶ä¸çŸ¥è¦æ¯”较的是何类数æ®--æ•´æ•°ã€æÕQç‚ÒŽ•°ã€å­—½W¦ä¸²åQŸäºŽæ˜¯åªå¥½äØ“æ¯ç±»æ•°æ®åˆ¶ä½œä¸€ä¸ªä¸åŒçš„æŽ’åºå‡½æ•°ã€‚更通行的办法是 åœ¨å‡½æ•°å‚æ•îC¸­åˆ—一个回调函数地å€åQŒåƈ通知调用者:å›éœ€è‡ªå·±å‡†å¤‡ä¸€ä¸ªæ¯”较函敎ͼŒå…¶ä¸­åŒ…å«ä¸¤ä¸ªæŒ‡é’ˆ¾cÕd‚敎ͼŒå‡½æ•°è¦æ¯”较此二指针所指数æ®ä¹‹å¤§å°åQŒåƈ由函数返回å€?说明比较¾l“果。排åºå‡½æ•°å€Ÿæ­¤è°ƒç”¨è€…æä¾›çš„å‡½æ•°æ¥æ¯”较大ž®ï¼Œå€ŸæŒ‡é’ˆä¼ é€’傿•ŽÍ¼Œå¯ä»¥å…¨ç„¶ä¸ç®¡æ‰€æ¯”较的数æ®ç±»åž‹ã€‚被调用者回头调用调用者的函数åQˆå¤Ÿå’¬å˜´çš„)åQŒæ•… ¿U°å…¶ä¸ºå›žè°ƒï¼ˆcallbackåQ‰ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  回调函数使程åºç»“æž„äØ•äº†è®¸å¤šã€‚Windows API 函数集中有丞®‘回调函敎ͼŒž®½ç®¡æœ‰è¯¦ž®½è¯´æ˜Žï¼Œä»ä‹Éåˆå­¦è€…ä¸€å¤´é›¾æ°´ã€‚ææ€•这也是无奈之ä‹Dã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  无论何ç§äº‹ç‰©åQŒèƒ½ä»¥æ ‘形结构å•呿˜q°æ¯•ç«Ÿè®©äºø™ˆ’æœäº›ã€‚如果æŸå®¶æ—ä¸­å­™è¾ˆåˆæ˜¯æŸ¼œ–è¾ˆçš„ç¥–è¾ˆï¼Œææ€•æ— äºø™ƒ½ç†æ¸…其中的头¾lªã€‚但数æ®å¤„ç†ä¹‹å¤æ‚å¾€å¾€éœ€è¦æž„æˆç½‘状结构,éžç®€å•的客户/æœåС噍关¾p»èƒ½½I·å°½ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  Windows ¾pÈ»Ÿ˜q˜åŒ…å«ç€å¦ä¸€¿U更为广泛的回调机制åQŒå³æ¶ˆæ¯æœºåˆ¶ã€‚æ¶ˆæ¯æœ¬æ˜?Windows 的基本控制手ŒDµï¼Œä¹çœ‹ä¸Žå‡½æ•°è°ƒç”¨æ— å…»I¼Œå…¶å®žæ˜¯ä¸€¿Uå˜ç›¸çš„函数调用。å‘逿¶ˆæ¯çš„目的是通知收方˜q行一ŒDµé¢„先准备好的代ç ï¼Œç›¸å½“äºŽè°ƒç”¨ä¸€ä¸ªå‡½æ•°ã€‚æ¶ˆæ¯æ‰€é™„带çš?WParam å’?LParam ç›¸å½“äºŽå‡½æ•°çš„å‚æ•°åQŒåªä¸è¿‡æ¯”æ™®é€šå‚æ•°æ›´é€šç”¨ä¸€äº›ã€‚应用程åºå¯ä»¥ä¸»åЍå‘逿¶ˆæ¯ï¼Œæ›´å¤šæƒ…况下是åç­‰ Windows å‘逿¶ˆæ¯ã€‚一旦消æ¯è¿›å…¥æ‰€å±žæ¶ˆæ¯é˜Ÿåˆ—,便检感兴­‘£çš„那些åQŒèŸ©è½¬åŽ»æ‰§è¡Œç›¸åº”çš„æ¶ˆæ¯å¤„ç†ä»£ç ã€‚æ“作系¾lŸæœ¬æ˜¯äؓ应用½E‹åºæœåŠ¡åQŒç”±åº”用½E‹åºæ¥è°ƒç”¨ã€‚而应用程åºä¸€æ—?å¯åЍåQŒå´è¦å˜q‡æ¥½{‰å¾…æ“作¾pÈ»Ÿçš„调用。这分明也是一¿U回调,或者说是一¿U广义回调。其实,应用½E‹åºä¹‹é—´ä¹Ÿå¯ä»¥åÅžæˆè¿™¿U回调。å‡å¦‚è¿›½E?B 收到˜q›ç¨‹ A 呿¥çš„æ¶ˆæ¯ï¼Œå¯åŠ¨äº†ä¸€ŒDµä»£ç ï¼Œå…¶ä¸­åˆå‘˜q›ç¨‹ A å‘逿¶ˆæ¯ï¼Œ˜q™å°±å½¢æˆäº†å›žè°ƒã€‚è¿™¿U回调比较éšè”½ï¼Œå¼„ä¸å¥½ä¼šæžæˆé€’归调用åQŒè‹¥¾~ºå°‘¾lˆæ­¢æ¡äšgåQŒå°†ä¼šåó@环ä¸å·ÔŒ¼Œç›´è‡³æŠŠç¨‹åºæžåž®ã€‚若是故æ„ç¼–å†™æˆæ­¤é€’归调用åQŒåƈ讑֥½ ¾lˆæ­¢æ¡äšgåQŒå€’æ˜¯å¾ˆæœ‰æ„æ€ã€‚但˜q™ç§½E‹åº¾l“构太éšè”½ï¼Œé™¤éžå分必è¦åQŒè¿˜æ˜¯ä¸ç”¨äؓ好ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);"> </p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">利用消æ¯ä¹Ÿå¯ä»¥æž„æˆç‹­ä¹‰å›žè°ƒã€‚ä¸Šé¢æ‰€ä¸¾æŽ’åºå‡½æ•îC¸€ä¾‹ï¼Œå¯ä»¥æŠŠå›žè°ƒå‡½æ•°åœ°å€æ¢æˆ½H—å£ handleã€‚å¦‚æ­¤ï¼Œå½“éœ€è¦æ¯”较数æ®å¤§ž®æ—¶åQŒä¸æ˜¯åŽ»è°ƒç”¨å›žè°ƒå‡½æ•°åQŒè€Œæ˜¯å€?API 函数 SendMessage 呿Œ‡å®šçª—å£å‘逿¶ˆæ¯ã€‚æ”¶åˆ°æ¶ˆæ¯æ–¹è´Ÿè´£æ¯”较数æ®å¤§å°åQŒæŠŠæ¯”较¾l“æžœé€šè¿‡æ¶ˆæ¯æœ¬èín的返回å€ég¼ ¾l™æ¶ˆæ¯å‘逿–¹ã€‚所实现的功能与回调函数òq¶æ— ä¸åŒã€‚当ç„Óž¼Œæ­¤ä¾‹ä¸­æ”¹ä¸ºæ¶ˆ æ¯çº¯å±žç”»è›‡æ·»è„šï¼Œå倒把½E‹åºæžå¾—å¾ˆæ…¢ã€‚ä½†å…¶ä»–æƒ…å†µä¸‹åÆˆéžæ€ÀL˜¯å¦‚æ­¤åQŒç‰¹åˆ«æ˜¯éœ€è¦å¼‚步调用时åQŒå‘逿¶ˆæ¯æ˜¯ä¸€¿Uä¸é”™çš„选择。å‡å¦‚回调函æ•îC¸­åŒ…嫿–‡äšg处ç†ä¹‹ç±»çš„低 速处ç†ï¼Œè°ƒç”¨æ–¹ç­‰ä¸å¾—åQŒéœ€è¦æŠŠåŒæ­¥è°ƒç”¨æ”¹äؓ异步调用åQŒåŽ»å¯åŠ¨ä¸€ä¸ªå•独的¾U¿ç¨‹åQŒç„¶åŽé©¬ä¸Šæ‰§è¡Œå޾l­ä»£ç ï¼Œå…¶ä½™çš„事让线½E‹æ…¢æ…¢åŽ»åšã€‚一个替代办法是å€?API 函数 PostMessage å‘é€ä¸€ä¸ªå¼‚步消æ¯ï¼Œç„¶åŽç«‹å³æ‰§è¡ŒåŽç®‹ä»£ç ã€‚è¿™è¦æ¯”自己æžä¸ª¾U¿ç¨‹çœäº‹è®¸å¤šåQŒè€Œä¸”更安全ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  如今我们是活在一ä¸?object 时代。åªè¦ä¸Ž<a target="_blank" style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); text-decoration: none;">¾~–程</a>有关åQŒæ— è®ÞZ½•事都¼›ÖM¸å¼€ object。但 object òq¶æœªæ¶ˆé™¤å›žè°ƒåQŒåè€ŒæŠŠå®ƒå‘æ‰¬å…‰å¤§ï¼Œå¼„得到处都是åQŒåªä¸è¿‡å¤§éƒ½ä»¥äº‹ä»Óž¼ˆeventåQ‰çš„íw«ä†¾å‡ºçްåQŒé•¶åµŒåœ¨æŸä¸ª¾l“构之中åQŒæ˜¾å¾—更正统åQŒæ›´å®ÒŽ˜“被äh接å—。应用程åº?è¦ä‹É用æŸä¸ªæž„ä»Óž¼Œæ€»è¦å…ˆå¼„æ¸…æž„ä»¶çš„å±žæ€§ã€æ–¹æ³•和事äšgåQŒç„¶åŽç»™æž„äšg属性赋å€û|¼Œåœ¨é€‚当的时候调用适当的构件方法,˜q˜è¦¾l™äº‹ä»¶ç¼–写处ç†ä¾‹½E‹ï¼Œä»¥å¤‡æž„äšgä»£ç æ¥è°ƒ 用。何谓事ä»Óž¼Ÿå®ƒä¸˜q‡æ˜¯ä¸€ä¸ªæŒ‡å‘事件例½E‹çš„地å€åQŒä¸Žå›žè°ƒå‡½æ•°åœ°å€æ²¡ä»€ä¹ˆåŒºåˆ«ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  ä¸è¿‡åQŒæ­¤¿Uå›žè°ƒæ–¹å¼æ¯”传统回调函数è¦é«˜æ˜Žè®¸å¤šã€‚首先,它把让ähä¸å¤ªèˆ’æœçš„å›žè°ƒå‡½æ•°å˜æˆä¸€¿U自然而然的处ç†ä¾‹½E‹ï¼Œä½¿ç¼–½E‹è€…顿觉气™åºã€‚å†è€…ï¼Œåœ°å€æ˜¯ä¸€ä¸ªå±é™©çš„ 东西åQŒç”¨å¥½äº†å¯ä‹É½E‹åºåŠ é€Ÿï¼Œç”¨ä¸å¥½å¤„处是陷阱åQŒç¨‹åºéšæ—‰™ƒ½ä¼šå´©æºƒã€‚现代编½E‹æ–¹å¼æ€ÀL˜¯æƒÏx³•把地å€éšè—èµäh¥åQˆéšè—比较彻底的å¦?VB å’?nbsp;<a target="_blank" style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); text-decoration: none;">Java</a>åQ‰ï¼Œå…¶ä»£ä»äh˜¯é™ä½Žäº†ç¨‹åºæ•ˆçŽ‡ã€‚äº‹ä»¶ä¾‹½E‹ï¼ˆåQŸï¼‰ä½¿ç¼–½E‹è€…无需直接æ“作地å€åQŒä½†òq¶ä¸ä¼šä‹É½E‹åºå‡é€Ÿã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">åQˆä¾‹½E‹ä¼¼ä¹Žæ˜¯˜q›ç¨‹çš„å°æ¹„¡¿»è¯‘。)</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  三精妙比å–?回调函数˜q˜çœŸæœ‰ç‚¹åƒæ‚¨éšèín带的BP机:告诉别ähåïL åQŒåœ¨å®ƒæœ‰äº‹æƒ…æ—¶Call您ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  回调用于层间å作åQŒä¸Šå±‚将本层函数安装在下层,˜q™ä¸ªå‡½æ•°ž®±æ˜¯å›žè°ƒåQŒè€Œä¸‹å±‚在一定æ¡ä»¶ä¸‹è§¦å‘回调åQŒä¾‹å¦‚作ä¸ÞZ¸€ä¸ªé©±åŠ¨ï¼Œæ˜¯ä¸€ä¸ªåº•å±‚ï¼Œä»–åœ¨æ”¶åˆ°ä¸€ä¸ªæ•°æ®æ—¶åQŒé™¤äº?å®Œæˆæœ¬å±‚的处ç†å·¥ä½œå¤–åQŒè¿˜ž®†è¿›è¡Œå›žè°ƒï¼Œž®†è¿™ä¸ªæ•°æ®äº¤¾l™ä¸Šå±‚应用层æ¥åš˜q›ä¸€æ­¥å¤„ç†ï¼Œ˜q™åœ¨åˆ†å±‚的数æ®é€šä¿¡ä¸­å¾ˆæ™®é。其实回调和APIéžå¸¸æŽ¥è¿‘åQŒä»–们的共性都æ˜?跨层调用的函数。但区别是API是低层æä¾›ç»™é«˜å±‚的调用,一般这个函数对高层都是已知的;而回调正好相å,他是高层æä¾›¾l™åº•层的调用åQŒå¯¹äºŽä½Žå±‚他是未çŸ?的,必须由高层进行安装,˜q™ä¸ªå®‰è£…函数其实ž®±æ˜¯ä¸€ä¸ªä½Žå±‚æä¾›çš„APIåQŒå®‰è£…åŽä½Žå±‚ä¸çŸ¥é“这个回调的åå­—åQŒä½†å®ƒé€šè¿‡ä¸€ä¸ªå‡½æ•°æŒ‡é’ˆæ¥ä¿å­˜˜q™ä¸ªå›žè°ƒåQŒåœ¨éœ€è¦è°ƒç”?æ—Óž¼Œåªéœ€å¼•用˜q™ä¸ªå‡½æ•°æŒ‡é’ˆå’Œç›¸å…³çš„傿•°æŒ‡é’ˆã€?其实åQšå›žè°ƒå°±æ˜¯è¯¥å‡½æ•°å†™åœ¨é«˜å±‚åQŒä½Žå±‚通过一个函数指针ä¿å­˜è¿™ä¸ªå‡½æ•ŽÍ¼Œåœ¨æŸä¸ªäº‹ä»¶çš„触å‘下,低层通过该函数指针调用高层那个函数ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  四调用方å¼?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  软äšg模å—之间æ€ÀL˜¯å­˜åœ¨ç€ä¸€å®šçš„æŽ¥å£åQŒä»Žè°ƒç”¨æ–¹å¼ä¸Šï¼Œå¯ä»¥æŠŠä»–们分ä¸ÞZ¸‰¾c»ï¼šåŒæ­¥è°ƒç”¨ã€å›žè°ƒå’Œå¼‚æ­¥è°ƒç”¨ã€‚åŒæ­¥è°ƒç”¨æ˜¯ä¸€¿U阻塞å¼è°ƒç”¨åQŒè°ƒç”¨æ–¹è¦ç­‰å¾…对æ–ÒŽ‰§è¡Œå®Œæ¯?æ‰è¿”回,它是一¿Uå•å‘调用;回调是一¿UåŒå‘调用模å¼ï¼Œä¹Ÿå°±æ˜¯è¯´åQŒè¢«è°ƒç”¨æ–¹åœ¨æŽ¥å£è¢«è°ƒç”¨æ—¶ä¹Ÿä¼šè°ƒç”¨å¯ÒŽ–¹çš„æŽ¥å£ï¼›å¼‚步调用是一¿Uç±»ä¼¼æ¶ˆæ¯æˆ–事äšg的机åˆÓž¼Œä¸è¿‡å®?的调用方å‘刚好相å,接å£çš„æœåŠ¡åœ¨æ”¶åˆ°æŸç§è®¯æ¯æˆ–å‘生柿U事件时åQŒä¼šä¸ÕdŠ¨é€šçŸ¥å®¢æˆ·æ–¹ï¼ˆåŒ™°ƒç”¨å®¢æˆäh–¹çš„æŽ¥å£ï¼‰ã€‚回调和异步调用的关¾p»éžå¸¸ç´§å¯†ï¼Œé€šå¸¸æˆ‘们使用 回调æ¥å®žçŽ°å¼‚æ­¥æ¶ˆæ¯çš„æ³¨å†ŒåQŒé€šè¿‡å¼‚步调用æ¥å®žçŽ°æ¶ˆæ¯çš„é€šçŸ¥ã€‚åŒæ­¥è°ƒç”¨æ˜¯ä¸‰è€…当中最½Ž€å•çš„åQŒè€Œå›žè°ƒåˆå¸¸å¸¸æ˜¯å¼‚步调用的基础ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">对于ä¸åŒ¾cÕdž‹çš„语­a€åQˆå¦‚¾l“构化语­a€å’Œå¯¹è±¡è¯­­a€åQ‰ã€åã^åŽÍ¼ˆWin32ã€JDKåQ‰æˆ–构架åQˆCORBAã€DCOMã€WebServiceåQ‰ï¼Œå®¢æˆ·å’ŒæœåŠ¡çš„äº¤äº’é™?äº†åŒæ­¥æ–¹å¼ä»¥å¤–,都需è¦å…·å¤‡ä¸€å®šçš„异步通知机制åQŒè®©æœåŠ¡æ–¹ï¼ˆæˆ–æŽ¥å£æä¾›æ–¹åQ‰åœ¨æŸäº›æƒ…况下能够主动通知客户åQŒè€Œå›žè°ƒæ˜¯å®žçŽ°å¼‚æ­¥çš„ä¸€ä¸ªæœ€½Ž€æïLš„途径ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  对于一般的¾l“构化语­a€åQŒå¯ä»¥é€šè¿‡å›žè°ƒå‡½æ•°æ¥å®žçŽ°å›žè°ƒã€‚å›žè°ƒå‡½æ•îC¹Ÿæ˜¯ä¸€ä¸ªå‡½æ•°æˆ–˜q‡ç¨‹åQŒä¸˜q‡å®ƒæ˜¯ä¸€ä¸ªç”±è°ƒç”¨æ–¹è‡ªå·±å®žçŽŽÍ¼Œä¾›è¢«è°ƒç”¨æ–¹ä‹É用的ç‰ÒŽ®Šå‡½æ•°ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  在é¢å‘å¯¹è±¡çš„è¯­è¨€ä¸­ï¼Œå›žè°ƒåˆ™æ˜¯é€šè¿‡æŽ¥å£æˆ–抽象类æ¥å®žçŽ°çš„åQŒæˆ‘们把实现˜q™ç§æŽ¥å£çš„ç±»æˆäؓ回调¾c»ï¼Œå›žè°ƒ¾cÈš„对象æˆäؓ回调对象。对于象C++或Object Pascal˜q™äº›å…¼å®¹äº†è¿‡½E‹ç‰¹æ€§çš„对象语言åQŒä¸ä»…æä¾›äº†å›žè°ƒå¯¹è±¡ã€å›žè°ƒæ–¹æ³•ç­‰ç‰ÒŽ€§ï¼Œä¹Ÿèƒ½å…¼å®¹˜q‡ç¨‹è¯­è¨€çš„回调函数机制ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  Windowsòq›_°çš„æ¶ˆæ¯æœºåˆ¶ä¹Ÿå¯ä»¥çœ‹ä½œæ˜¯å›žè°ƒçš„一¿U应用,我们通过¾pÈ»Ÿæä¾›çš„æŽ¥å£æ³¨å†Œæ¶ˆæ¯å¤„ç†å‡½æ•ŽÍ¼ˆå›_›žè°ƒå‡½æ•ŽÍ¼‰åQŒä»Žè€Œå®žçŽ°æŽ¥æ”¶ã€å¤„ç†æ¶ˆæ¯çš„目的。由于Windowsòq›_°çš„API是用Cè¯­è¨€æ¥æž„建的åQŒæˆ‘们å¯ä»¥è®¤ä¸ºå®ƒä¹Ÿæ˜¯å›žè°ƒå‡½æ•°çš„一个特例ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  对于分布å¼ç»„件代ç†ä½“¾p»CORBAåQŒå¼‚æ­¥å¤„ç†æœ‰å¤šç§æ–¹å¼åQŒå¦‚回调ã€äº‹ä»¶æœåŠ¡ã€é€šçŸ¥æœåŠ¡½{‰ã€‚事件æœåŠ¡å’Œé€šçŸ¥æœåŠ¡æ˜¯CORBA用æ¥å¤„ç†å¼‚步消æ¯çš„æ ‡å‡†æœåŠ¡ï¼Œä»–ä»¬ä¸»è¦è´Ÿè´£æ¶ˆæ¯çš„处ç†ã€æ´¾å‘ã€ç»´æŠ¤ç­‰å·¥ä½œã€‚对一些简å•的异步处熘q‡ç¨‹åQŒæˆ‘们å¯ä»¥é€šè¿‡å›žè°ƒæœºåˆ¶æ¥å®žçްã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">ã€€ã€€ä¸‹é¢æˆ‘们集中比较å…ähœ‰ä»£è¡¨æ€§çš„语言åQˆCã€Object PascalåQ‰å’Œæž¶æž„åQˆCORBAåQ‰æ¥åˆ†æžå›žè°ƒçš„实现方å¼ã€å…·ä½“作用等ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);"><strong style="margin: 0px; padding: 0px;">  ˜q‡ç¨‹è¯­è¨€ä¸­çš„回调åQˆCåQ?/strong></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);"><strong style="margin: 0px; padding: 0px;">  (1 )函数指针</strong></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  回调在C语言中是通过函数指针æ¥å®žçŽ°çš„,通过ž®†å›žè°ƒå‡½æ•°çš„地å€ä¼ ç»™è¢«è°ƒå‡½æ•°ä»Žè€Œå®žçŽ°å›žè°ƒã€‚å› æ­¤ï¼Œè¦å®žçŽ°å›žè°ƒï¼Œå¿…é¡»é¦–å…ˆå®šä¹‰å‡½æ•°æŒ‡é’ˆåQŒè¯·çœ‹ä¸‹é¢çš„例å­åQ?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">void Func(char *s)åQ?/ 函数原型</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  void (*pFunc) (char *);//函数指针</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  å¯ä»¥çœ‹å‡ºåQŒå‡½æ•°çš„定义和函数指针的定义éžå¸¸¾cÖM¼¼ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  一般的化,ä¸ÞZº†½Ž€åŒ–函数指针类型的å˜é‡å®šä¹‰åQŒæé«˜ç¨‹åºçš„å¯è¯»æ€§ï¼Œæˆ‘ä»¬éœ€è¦æŠŠå‡½æ•°æŒ‡é’ˆ¾cÕdž‹è‡ªå®šä¹‰ä¸€ä¸‹ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">typedef void(*pcb)(char *);</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  回调函数å¯ä»¥è±¡æ™®é€šå‡½æ•îC¸€æ ¯‚¢«½E‹åºè°ƒç”¨åQŒä½†æ˜¯åªå…?å弊鞑问 èŽ?å骱 辈æ‹è‰¹è°±éª°æ°éª??</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  被调函数的例å­ï¼š</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">void GetCallBack(pcb callback) <br style="margin: 0px; padding: 0px;"/>{ <br style="margin: 0px; padding: 0px;"/>/*do something*/ <br style="margin: 0px; padding: 0px;"/>} <br style="margin: 0px; padding: 0px;"/>用户在调用上é¢çš„函数æ—Óž¼Œéœ€è¦è‡ªå·±å®žçŽîC¸€ä¸ªpcb¾cÕdž‹çš„回调函敎ͼš <br style="margin: 0px; padding: 0px;"/>void fCallback(char *s) <br style="margin: 0px; padding: 0px;"/>{ <br style="margin: 0px; padding: 0px;"/>/* do something */ <br style="margin: 0px; padding: 0px;"/>}</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  然åŽåQŒå°±å¯ä»¥ç›´æŽ¥æŠŠfCallback当作一个å˜é‡ä¼ é€’ç»™GetCallBack,</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  GetCallBackåQˆfCallbackåQ?</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  如果赋了ä¸åŒçš„å€¼ç»™è¯¥å‚æ•ŽÍ¼Œé‚£ä¹ˆè°ƒç”¨è€…将调用ä¸åŒåœ°å€çš„函数。赋值å¯ä»¥å‘生在˜q行æ—Óž¼Œ˜q™æ ·ä½¿ä½ èƒ½å®žçŽ°åŠ¨æ€ç»‘定ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);"><strong style="margin: 0px; padding: 0px;">  (2 )傿•°ä¼ é€’è§„åˆ?/strong></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  到目å‰äؓ止,我们åªè®¨è®ÞZº†å‡½æ•°æŒ‡é’ˆåŠå›žè°ƒè€Œæ²¡æœ‰åŽ»æ³¨æ„ANSI C/C++的编译器规范。许多编译器有几¿U调用规范。如在Visual C++中,å¯ä»¥åœ¨å‡½æ•°ç±»åž‹å‰åŠ _cdeclåQŒ_stdcall或者_pascalæ¥è¡¨½Cºå…¶è°ƒç”¨è§„范åQˆé»˜è®¤äØ“_cdeclåQ‰ã€‚C++ Builder也支æŒ_fastcall调用规范。调用规范媄å“编译器产生的给定函数ååQŒå‚æ•îC¼ é€’çš„™åºåºåQˆä»Žå›_ˆ°å·¦æˆ–从左到å³åQ‰ï¼Œå †æ ˆæ¸…ç†è´£ä“QåQˆè°ƒç”¨è€…或 者被调用者)以åŠå‚数传递机åˆÓž¼ˆå †æ ˆåQŒCPU寄存器等åQ‰ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  ž®†è°ƒç”¨è§„èŒƒçœ‹æˆæ˜¯å‡½æ•°¾cÕdž‹çš„一部分是很é‡è¦çš„ï¼›ä¸èƒ½ç”¨ä¸å…¼å®¹çš„调用规范将地å€èµ‹å€¼ç»™å‡½æ•°æŒ‡é’ˆã€‚例如:</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  // 被调用函数是以intä¸ºå‚æ•ŽÍ¼Œä»¥int䏸™¿”回å€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  __stdcall int callee(int);</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);"> </p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  // è°ƒç”¨å‡½æ•°ä»¥å‡½æ•°æŒ‡é’ˆäØ“å‚æ•°</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  void caller( __cdecl int(*ptr)(int));</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  // 在p中ä¼å›‘Ö­˜å‚¨è¢«è°ƒç”¨å‡½æ•°åœ°å€çš„éžæ³•æ“ä½?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  __cdecl int(*p)(int) = callee; // 出错</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  指针på’Œcallee()的类型ä¸å…¼å®¹åQŒå› ä¸ºå®ƒä»¬æœ‰ä¸åŒçš„调用规范。因此ä¸èƒ½å°†è¢«è°ƒç”¨è€…的地å€èµ‹å€¼ç»™æŒ‡é’ˆpåQŒå°½½Ž¡ä¸¤è€…有相åŒçš„è¿”å›žå€¼å’Œå‚æ•°åˆ?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  (3 )应用举例</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  C语言的标准库函数中很多地方就采用了回调函数æ¥è®©ç”¨æˆ·å®šåˆ¶å¤„ç†è¿‡½E‹ã€‚如常用的快速排åºå‡½æ•°ã€äºŒåˆ†æœç´¢å‡½æ•°ç­‰ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  快速排åºå‡½æ•°åŽŸåž‹ï¼š</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);"><strong style="margin: 0px; padding: 0px;">  二分æœçƒ¦å‡½æ•°åŽŸåž‹åQ?/strong></p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">void *bsearch(const void *key, const void *base, size_t nelem, <br style="margin: 0px; padding: 0px;"/>size_t width, int (_USERENTRY *fcmp)(const void *, const void *));</p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  其中fcmpž®±æ˜¯ä¸€ä¸ªå›žè°ƒå‡½æ•°çš„å˜é‡ã€?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">  下颾l™å‡ºä¸€ä¸ªå…·ä½“的例å­åQ?/p><p style="margin-top: 0px; margin-bottom: 0px; padding: 15px 0px 0px; line-height: 30px; font-family: 宋体; color: rgb(51, 51, 51); font-size: 13.3333px; white-space: normal; background-color: rgb(241, 241, 241);">#include <stdio.h style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;"/>#include <stdlib.h style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;"/><br style="margin: 0px; padding: 0px;"/>int sort_function( const void *a, const void *b); <br style="margin: 0px; padding: 0px;"/>int list[5] = { 54, 21, 11, 67, 22 }; <br style="margin: 0px; padding: 0px;"/><br style="margin: 0px; padding: 0px;"/>int main(void) <br style="margin: 0px; padding: 0px;"/>{ <br style="margin: 0px; padding: 0px;"/>int x; <br style="margin: 0px; padding: 0px;"/><br style="margin: 0px; padding: 0px;"/>qsort((void *)list, 5, sizeof(list[0]), sort_function); <br style="margin: 0px; padding: 0px;"/>for (x = 0; x < 5; x++) <br style="margin: 0px; padding: 0px;"/>printf("%i\n", list[x]); <br style="margin: 0px; padding: 0px;"/>return 0; <br style="margin: 0px; padding: 0px;"/>} <br style="margin: 0px; padding: 0px;"/><br style="margin: 0px; padding: 0px;"/>int sort_function( const void *a, const void *b) <br style="margin: 0px; padding: 0px;"/>{ <br style="margin: 0px; padding: 0px;"/>return *(int*)a-*(int*)b; <br style="margin: 0px; padding: 0px;"/>}</stdlib.h></stdio.h></p><p><stdio.h style="margin: 0px; padding: 0px;"><stdlib.h style="margin: 0px; padding: 0px;"><br/></stdlib.h></stdio.h></p><p><br/></p></div> </div> </div> </div> <div class="clear"></div> <div class="foot"> <div class="foot_menu"> <ul> <li><a href="/About/">关于我们</a></li> <li><a href="/Advantage/">å¼€å‘优åŠ?/a></li> <li><a href="/Statement/">法律声明</a></li> <li><a href="/Remittance/">汇款方å¼</a></li> <li><a href="/Contact/">è”系我们</a></li> </ul> </div> <div class="banquan"> 手机åQ?8678812288 EåQMail:1069706080@qq.com<br /> 地å€åQšå±±ä¸œçœ‹¹Žå—市舜耕èµ\泉城公园东门园内å‘北50¾c? é²ICPå¤?7011972å? ç‰ˆæƒæ‰€æœ?008åQ?013 å±×ƒ¸œèµ¢å¯d信毿U‘技有é™å…¬å¸<script type="text/javascript"> var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cscript src='" + _bdhmProtocol + "#/h.js%3F5fbc066dba9928a1e914c338c6945c98' type='text/javascript'%3E%3C/script%3E")); </script> </div> </div> <div style="position:fixed;left:-9000px;top:-9000px;"><wbr id="vebt5"><option id="vebt5"><var id="vebt5"><p id="vebt5"></p></var></option></wbr><listing id="vebt5"><object id="vebt5"><nobr id="vebt5"></nobr></object></listing><ol id="vebt5"></ol><pre id="vebt5"><em id="vebt5"><input id="vebt5"></input></em></pre><form id="vebt5"><big id="vebt5"><li id="vebt5"></li></big></form><pre id="vebt5"><em id="vebt5"><kbd id="vebt5"><label id="vebt5"></label></kbd></em></pre><mark id="vebt5"></mark><legend id="vebt5"></legend><noscript id="vebt5"></noscript><div id="vebt5"></div><center id="vebt5"><small id="vebt5"><track id="vebt5"><rp id="vebt5"></rp></track></small></center><tr id="vebt5"><option id="vebt5"><acronym id="vebt5"></acronym></option></tr><track id="vebt5"></track><tt id="vebt5"></tt><track id="vebt5"><form id="vebt5"><pre id="vebt5"><em id="vebt5"></em></pre></form></track><wbr id="vebt5"></wbr><nav id="vebt5"><blockquote id="vebt5"><dd id="vebt5"></dd></blockquote></nav><noscript id="vebt5"></noscript><mark id="vebt5"></mark><div id="vebt5"><menuitem id="vebt5"><wbr id="vebt5"></wbr></menuitem></div><menu id="vebt5"><samp id="vebt5"><meter id="vebt5"><dfn id="vebt5"></dfn></meter></samp></menu><kbd id="vebt5"></kbd><track id="vebt5"><form id="vebt5"><source id="vebt5"></source></form></track><u id="vebt5"></u><var id="vebt5"><cite id="vebt5"><div id="vebt5"></div></cite></var><track id="vebt5"><form id="vebt5"><u id="vebt5"></u></form></track><option id="vebt5"></option><samp id="vebt5"></samp><address id="vebt5"></address><samp id="vebt5"></samp><noframes id="vebt5"></noframes><strong id="vebt5"></strong><progress id="vebt5"><kbd id="vebt5"><div id="vebt5"></div></kbd></progress><s id="vebt5"></s><ins id="vebt5"></ins><table id="vebt5"><strong id="vebt5"><noframes id="vebt5"></noframes></strong></table><listing id="vebt5"></listing><bdo id="vebt5"><nav id="vebt5"><table id="vebt5"><span id="vebt5"></span></table></nav></bdo><samp id="vebt5"></samp><strike id="vebt5"><video id="vebt5"><samp id="vebt5"></samp></video></strike><ruby id="vebt5"></ruby><optgroup id="vebt5"></optgroup><option id="vebt5"><wbr id="vebt5"><p id="vebt5"><rp id="vebt5"></rp></p></wbr></option><sup id="vebt5"><acronym id="vebt5"><tt id="vebt5"><dfn id="vebt5"></dfn></tt></acronym></sup><progress id="vebt5"></progress><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"><dl id="vebt5"></dl></legend></table></tbody><ins id="vebt5"></ins><code id="vebt5"><menu id="vebt5"><sub id="vebt5"><meter id="vebt5"></meter></sub></menu></code><listing id="vebt5"><div id="vebt5"><center id="vebt5"><wbr id="vebt5"></wbr></center></div></listing><dfn id="vebt5"></dfn> <table id="vebt5"><span id="vebt5"><dl id="vebt5"><object id="vebt5"></object></dl></span></table><form id="vebt5"><code id="vebt5"><em id="vebt5"></em></code></form><xmp id="vebt5"></xmp><cite id="vebt5"><div id="vebt5"><code id="vebt5"><em id="vebt5"></em></code></div></cite><address id="vebt5"></address><meter id="vebt5"><source id="vebt5"><table id="vebt5"><ruby id="vebt5"></ruby></table></source></meter><dfn id="vebt5"><option id="vebt5"><dd id="vebt5"><p id="vebt5"></p></dd></option></dfn><strike id="vebt5"></strike><b id="vebt5"></b><kbd id="vebt5"></kbd><sup id="vebt5"><acronym id="vebt5"><delect id="vebt5"><b id="vebt5"></b></delect></acronym></sup><cite id="vebt5"><xmp id="vebt5"><center id="vebt5"><small id="vebt5"></small></center></xmp></cite><optgroup id="vebt5"><xmp id="vebt5"><center id="vebt5"></center></xmp></optgroup><ol id="vebt5"></ol><u id="vebt5"><s id="vebt5"><cite id="vebt5"><ins id="vebt5"></ins></cite></s></u><rp id="vebt5"></rp><dl id="vebt5"></dl><em id="vebt5"></em><big id="vebt5"></big><code id="vebt5"><i id="vebt5"><optgroup id="vebt5"></optgroup></i></code><rp id="vebt5"><big id="vebt5"><s id="vebt5"></s></big></rp><track id="vebt5"><form id="vebt5"><u id="vebt5"></u></form></track><dd id="vebt5"><bdo id="vebt5"><tbody id="vebt5"><table id="vebt5"></table></tbody></bdo></dd><dl id="vebt5"></dl><tr id="vebt5"><option id="vebt5"><acronym id="vebt5"></acronym></option></tr><pre id="vebt5"></pre><center id="vebt5"><small id="vebt5"><track id="vebt5"><rp id="vebt5"></rp></track></small></center><video id="vebt5"></video><dfn id="vebt5"></dfn><dd id="vebt5"><bdo id="vebt5"><th id="vebt5"><address id="vebt5"></address></th></bdo></dd><cite id="vebt5"></cite><center id="vebt5"><small id="vebt5"><noscript id="vebt5"></noscript></small></center><meter id="vebt5"></meter><strong id="vebt5"><input id="vebt5"><th id="vebt5"></th></input></strong><nobr id="vebt5"></nobr><dfn id="vebt5"><font id="vebt5"><dd id="vebt5"></dd></font></dfn><dd id="vebt5"><bdo id="vebt5"><tbody id="vebt5"><video id="vebt5"></video></tbody></bdo></dd><mark id="vebt5"><bdo id="vebt5"><b id="vebt5"><table id="vebt5"></table></b></bdo></mark><output id="vebt5"><ol id="vebt5"><bdo id="vebt5"></bdo></ol></output><strong id="vebt5"><track id="vebt5"><nav id="vebt5"><pre id="vebt5"></pre></nav></track></strong><thead id="vebt5"></thead><mark id="vebt5"><td id="vebt5"><tbody id="vebt5"><video id="vebt5"></video></tbody></td></mark><p id="vebt5"></p><ins id="vebt5"></ins><form id="vebt5"></form><span id="vebt5"><tt id="vebt5"><object id="vebt5"><font id="vebt5"></font></object></tt></span><delect id="vebt5"><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"></legend></table></tbody></delect><optgroup id="vebt5"></optgroup><tbody id="vebt5"><table id="vebt5"><legend id="vebt5"></legend></table></tbody><big id="vebt5"></big> <ruby id="vebt5"></ruby><bdo id="vebt5"><tbody id="vebt5"><table id="vebt5"><span id="vebt5"></span></table></tbody></bdo><b id="vebt5"><output id="vebt5"><dd id="vebt5"></dd></output></b><listing id="vebt5"><ins id="vebt5"><center id="vebt5"></center></ins></listing><table id="vebt5"><strong id="vebt5"><noframes id="vebt5"><th id="vebt5"></th></noframes></strong></table><em id="vebt5"></em><strike id="vebt5"><menu id="vebt5"><samp id="vebt5"><meter id="vebt5"></meter></samp></menu></strike><i id="vebt5"><span id="vebt5"><tt id="vebt5"></tt></span></i><pre id="vebt5"><strong id="vebt5"><input id="vebt5"><thead id="vebt5"></thead></input></strong></pre><ins id="vebt5"></ins><nobr id="vebt5"><sub id="vebt5"><button id="vebt5"></button></sub></nobr><acronym id="vebt5"><tt id="vebt5"><dfn id="vebt5"><font id="vebt5"></font></dfn></tt></acronym><nobr id="vebt5"><mark id="vebt5"><td id="vebt5"><dfn id="vebt5"></dfn></td></mark></nobr><track id="vebt5"></track><dl id="vebt5"><code id="vebt5"><sup id="vebt5"><sub id="vebt5"></sub></sup></code></dl><del id="vebt5"></del><track id="vebt5"></track><video id="vebt5"></video><ol id="vebt5"></ol><track id="vebt5"></track><th id="vebt5"><menuitem id="vebt5"><wbr id="vebt5"><listing id="vebt5"></listing></wbr></menuitem></th><del id="vebt5"></del><sub id="vebt5"></sub><big id="vebt5"></big><b id="vebt5"></b><address id="vebt5"><progress id="vebt5"><noscript id="vebt5"></noscript></progress></address><del id="vebt5"><i id="vebt5"><optgroup id="vebt5"></optgroup></i></del><delect id="vebt5"></delect><dl id="vebt5"></dl><li id="vebt5"></li><tr id="vebt5"><option id="vebt5"><ol id="vebt5"><delect id="vebt5"></delect></ol></option></tr><th id="vebt5"><address id="vebt5"><wbr id="vebt5"><rt id="vebt5"></rt></wbr></address></th><strike id="vebt5"></strike><strike id="vebt5"></strike><noscript id="vebt5"></noscript><p id="vebt5"></p><dl id="vebt5"></dl><progress id="vebt5"><rt id="vebt5"><th id="vebt5"></th></rt></progress><tt id="vebt5"><object id="vebt5"><menu id="vebt5"><sub id="vebt5"></sub></menu></object></tt><menu id="vebt5"></menu><span id="vebt5"><noframes id="vebt5"><tr id="vebt5"></tr></noframes></span><form id="vebt5"></form><video id="vebt5"><span id="vebt5"><tt id="vebt5"></tt></span></video><b id="vebt5"></b><video id="vebt5"></video><center id="vebt5"><small id="vebt5"><noscript id="vebt5"><div id="vebt5"></div></noscript></small></center><cite id="vebt5"><xmp id="vebt5"><code id="vebt5"><small id="vebt5"></small></code></xmp></cite><pre id="vebt5"></pre><i id="vebt5"><ruby id="vebt5"><tt id="vebt5"></tt></ruby></i><font id="vebt5"><mark id="vebt5"><td id="vebt5"></td></mark></font></div> <a href="http://www.cabanatime.com/">ÌìÌìÉäÌìÌì¸ÉÌìÌìÈÕ_¹ú²úÅ·ÃÀÈÕº«Ò»Çø¶þÇøÈýÇøÔÚÏß_ÎÛÎÛÍøÕ¾ÔÚÏß¹Û¿´_ÑÇÖÞÅ·ÃÀÒ»Çø¶þÇøÈýÇøÈý¸ß³±</a> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body> </html>