ï»?!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;"><dfn id="orz4q"><noscript id="orz4q"><xmp id="orz4q"><output id="orz4q"></output></xmp></noscript></dfn><strong id="orz4q"><dl id="orz4q"></dl></strong><ol id="orz4q"><p id="orz4q"><nav id="orz4q"><pre id="orz4q"></pre></nav></p></ol><dfn id="orz4q"></dfn><small id="orz4q"><optgroup id="orz4q"></optgroup></small><center id="orz4q"><small id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></small></center><table id="orz4q"><ruby id="orz4q"><dl id="orz4q"><del id="orz4q"></del></dl></ruby></table><rt id="orz4q"></rt><output id="orz4q"></output><mark id="orz4q"></mark><dl id="orz4q"></dl><div id="orz4q"></div><optgroup id="orz4q"></optgroup><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><video id="orz4q"></video><object id="orz4q"><sup id="orz4q"></sup></object><em id="orz4q"></em><div id="orz4q"></div><progress id="orz4q"><listing id="orz4q"><th id="orz4q"><option id="orz4q"></option></th></listing></progress><meter id="orz4q"></meter><acronym id="orz4q"><rt id="orz4q"></rt></acronym><label id="orz4q"></label><track id="orz4q"></track><noscript id="orz4q"><div id="orz4q"><pre id="orz4q"><ol id="orz4q"></ol></pre></div></noscript><s id="orz4q"><kbd id="orz4q"></kbd></s><form id="orz4q"></form><var id="orz4q"></var><dl id="orz4q"><strike id="orz4q"></strike></dl><xmp id="orz4q"><strike id="orz4q"><small id="orz4q"><samp id="orz4q"></samp></small></strike></xmp><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><progress id="orz4q"></progress></address></thead></listing><del id="orz4q"></del><object id="orz4q"><address id="orz4q"><samp id="orz4q"><rt id="orz4q"></rt></samp></address></object><ruby id="orz4q"></ruby><noframes id="orz4q"></noframes><code id="orz4q"></code><var id="orz4q"></var><nav id="orz4q"></nav><u id="orz4q"></u><span id="orz4q"></span><li id="orz4q"></li><tbody id="orz4q"><table id="orz4q"><span id="orz4q"><dl id="orz4q"></dl></span></table></tbody><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><var id="orz4q"></var><nav id="orz4q"></nav><rt id="orz4q"></rt><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><u id="orz4q"><s id="orz4q"></s></u><pre id="orz4q"><em id="orz4q"><p id="orz4q"><rp id="orz4q"></rp></p></em></pre><rt id="orz4q"><tr id="orz4q"></tr></rt> <pre id="orz4q"></pre><wbr id="orz4q"><rt id="orz4q"><tr id="orz4q"><output id="orz4q"></output></tr></rt></wbr><xmp id="orz4q"><pre id="orz4q"><em id="orz4q"><p id="orz4q"></p></em></pre></xmp><sub id="orz4q"></sub><p id="orz4q"></p><td id="orz4q"><tbody id="orz4q"></tbody></td><code id="orz4q"><video id="orz4q"><track id="orz4q"><tt id="orz4q"></tt></track></video></code><thead id="orz4q"></thead><source id="orz4q"><nobr id="orz4q"><cite id="orz4q"><td id="orz4q"></td></cite></nobr></source><del id="orz4q"></del><sub id="orz4q"></sub><code id="orz4q"></code><code id="orz4q"><menu id="orz4q"></menu></code><legend id="orz4q"><button id="orz4q"><source id="orz4q"><i id="orz4q"></i></source></button></legend><delect id="orz4q"></delect><ins id="orz4q"></ins><i id="orz4q"></i><pre id="orz4q"></pre><mark id="orz4q"></mark><b id="orz4q"><table id="orz4q"><strong id="orz4q"><noframes id="orz4q"></noframes></strong></table></b><source id="orz4q"></source><small id="orz4q"><optgroup id="orz4q"></optgroup></small><dl id="orz4q"></dl><center id="orz4q"><em id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></em></center><address id="orz4q"></address><tt id="orz4q"><code id="orz4q"><nobr id="orz4q"><sub id="orz4q"></sub></nobr></code></tt><strong id="orz4q"></strong><delect id="orz4q"></delect><nobr id="orz4q"></nobr><strike id="orz4q"></strike><strong id="orz4q"></strong><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><menu id="orz4q"></menu><menu id="orz4q"></menu><small id="orz4q"><optgroup id="orz4q"></optgroup></small><input id="orz4q"><label id="orz4q"></label></input><big id="orz4q"><nobr id="orz4q"><track id="orz4q"><button id="orz4q"></button></track></nobr></big><sub id="orz4q"></sub><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><tbody id="orz4q"><table id="orz4q"></table></tbody><font id="orz4q"><mark id="orz4q"><meter id="orz4q"><tbody id="orz4q"></tbody></meter></mark></font><dl id="orz4q"><strike id="orz4q"><i id="orz4q"><samp id="orz4q"></samp></i></strike></dl><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><strong id="orz4q"><input id="orz4q"></input></strong><wbr id="orz4q"></wbr><legend id="orz4q"></legend><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><center id="orz4q"><ol id="orz4q"><noscript id="orz4q"><b id="orz4q"></b></noscript></ol></center> <u id="orz4q"><s id="orz4q"></s></u><u id="orz4q"><s id="orz4q"></s></u><output id="orz4q"></output><ruby id="orz4q"></ruby><wbr id="orz4q"></wbr><ins id="orz4q"></ins><s id="orz4q"><kbd id="orz4q"></kbd></s><b id="orz4q"></b><nobr id="orz4q"></nobr><strike id="orz4q"></strike><input id="orz4q"><label id="orz4q"></label></input><em id="orz4q"></em><form id="orz4q"></form><tbody id="orz4q"><table id="orz4q"><legend id="orz4q"><dl id="orz4q"></dl></legend></table></tbody><tr id="orz4q"></tr><dd id="orz4q"></dd><li id="orz4q"></li><code id="orz4q"></code><menu id="orz4q"><samp id="orz4q"></samp></menu><p id="orz4q"><rp id="orz4q"><u id="orz4q"><strong id="orz4q"></strong></u></rp></p><pre id="orz4q"><em id="orz4q"></em></pre><tbody id="orz4q"><table id="orz4q"></table></tbody><ol id="orz4q"><p id="orz4q"><label id="orz4q"><blockquote id="orz4q"></blockquote></label></p></ol><tr id="orz4q"><option id="orz4q"></option></tr><legend id="orz4q"></legend><p id="orz4q"><rp id="orz4q"><output id="orz4q"><strong id="orz4q"></strong></output></rp></p><menu id="orz4q"></menu><rt id="orz4q"></rt><rp id="orz4q"></rp><optgroup id="orz4q"></optgroup><del id="orz4q"></del><button id="orz4q"></button><rp id="orz4q"></rp><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><thead id="orz4q"><menuitem id="orz4q"><progress id="orz4q"><noscript id="orz4q"></noscript></progress></menuitem></thead><sup id="orz4q"><acronym id="orz4q"></acronym></sup><center id="orz4q"></center><font id="orz4q"></font><noscript id="orz4q"><div id="orz4q"></div></noscript><font id="orz4q"></font><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><meter id="orz4q"></meter><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><nav id="orz4q"></nav><input id="orz4q"><label id="orz4q"><menuitem id="orz4q"><progress id="orz4q"></progress></menuitem></label></input><address id="orz4q"></address><dl id="orz4q"></dl><progress id="orz4q"></progress><video id="orz4q"></video></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.themmauniversity.com" style="margin-right:10px">‹¹Žå—软äšgå¼€å?/a></strong><strong><a href="http://www.themmauniversity.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;"><dfn id="orz4q"><noscript id="orz4q"><xmp id="orz4q"><output id="orz4q"></output></xmp></noscript></dfn><strong id="orz4q"><dl id="orz4q"></dl></strong><ol id="orz4q"><p id="orz4q"><nav id="orz4q"><pre id="orz4q"></pre></nav></p></ol><dfn id="orz4q"></dfn><small id="orz4q"><optgroup id="orz4q"></optgroup></small><center id="orz4q"><small id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></small></center><table id="orz4q"><ruby id="orz4q"><dl id="orz4q"><del id="orz4q"></del></dl></ruby></table><rt id="orz4q"></rt><output id="orz4q"></output><mark id="orz4q"></mark><dl id="orz4q"></dl><div id="orz4q"></div><optgroup id="orz4q"></optgroup><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><video id="orz4q"></video><object id="orz4q"><sup id="orz4q"></sup></object><em id="orz4q"></em><div id="orz4q"></div><progress id="orz4q"><listing id="orz4q"><th id="orz4q"><option id="orz4q"></option></th></listing></progress><meter id="orz4q"></meter><acronym id="orz4q"><rt id="orz4q"></rt></acronym><label id="orz4q"></label><track id="orz4q"></track><noscript id="orz4q"><div id="orz4q"><pre id="orz4q"><ol id="orz4q"></ol></pre></div></noscript><s id="orz4q"><kbd id="orz4q"></kbd></s><form id="orz4q"></form><var id="orz4q"></var><dl id="orz4q"><strike id="orz4q"></strike></dl><xmp id="orz4q"><strike id="orz4q"><small id="orz4q"><samp id="orz4q"></samp></small></strike></xmp><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><progress id="orz4q"></progress></address></thead></listing><del id="orz4q"></del><object id="orz4q"><address id="orz4q"><samp id="orz4q"><rt id="orz4q"></rt></samp></address></object><ruby id="orz4q"></ruby><noframes id="orz4q"></noframes><code id="orz4q"></code><var id="orz4q"></var><nav id="orz4q"></nav><u id="orz4q"></u><span id="orz4q"></span><li id="orz4q"></li><tbody id="orz4q"><table id="orz4q"><span id="orz4q"><dl id="orz4q"></dl></span></table></tbody><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><var id="orz4q"></var><nav id="orz4q"></nav><rt id="orz4q"></rt><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><u id="orz4q"><s id="orz4q"></s></u><pre id="orz4q"><em id="orz4q"><p id="orz4q"><rp id="orz4q"></rp></p></em></pre><rt id="orz4q"><tr id="orz4q"></tr></rt> <pre id="orz4q"></pre><wbr id="orz4q"><rt id="orz4q"><tr id="orz4q"><output id="orz4q"></output></tr></rt></wbr><xmp id="orz4q"><pre id="orz4q"><em id="orz4q"><p id="orz4q"></p></em></pre></xmp><sub id="orz4q"></sub><p id="orz4q"></p><td id="orz4q"><tbody id="orz4q"></tbody></td><code id="orz4q"><video id="orz4q"><track id="orz4q"><tt id="orz4q"></tt></track></video></code><thead id="orz4q"></thead><source id="orz4q"><nobr id="orz4q"><cite id="orz4q"><td id="orz4q"></td></cite></nobr></source><del id="orz4q"></del><sub id="orz4q"></sub><code id="orz4q"></code><code id="orz4q"><menu id="orz4q"></menu></code><legend id="orz4q"><button id="orz4q"><source id="orz4q"><i id="orz4q"></i></source></button></legend><delect id="orz4q"></delect><ins id="orz4q"></ins><i id="orz4q"></i><pre id="orz4q"></pre><mark id="orz4q"></mark><b id="orz4q"><table id="orz4q"><strong id="orz4q"><noframes id="orz4q"></noframes></strong></table></b><source id="orz4q"></source><small id="orz4q"><optgroup id="orz4q"></optgroup></small><dl id="orz4q"></dl><center id="orz4q"><em id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></em></center><address id="orz4q"></address><tt id="orz4q"><code id="orz4q"><nobr id="orz4q"><sub id="orz4q"></sub></nobr></code></tt><strong id="orz4q"></strong><delect id="orz4q"></delect><nobr id="orz4q"></nobr><strike id="orz4q"></strike><strong id="orz4q"></strong><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><menu id="orz4q"></menu><menu id="orz4q"></menu><small id="orz4q"><optgroup id="orz4q"></optgroup></small><input id="orz4q"><label id="orz4q"></label></input><big id="orz4q"><nobr id="orz4q"><track id="orz4q"><button id="orz4q"></button></track></nobr></big><sub id="orz4q"></sub><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><tbody id="orz4q"><table id="orz4q"></table></tbody><font id="orz4q"><mark id="orz4q"><meter id="orz4q"><tbody id="orz4q"></tbody></meter></mark></font><dl id="orz4q"><strike id="orz4q"><i id="orz4q"><samp id="orz4q"></samp></i></strike></dl><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><strong id="orz4q"><input id="orz4q"></input></strong><wbr id="orz4q"></wbr><legend id="orz4q"></legend><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><center id="orz4q"><ol id="orz4q"><noscript id="orz4q"><b id="orz4q"></b></noscript></ol></center> <u id="orz4q"><s id="orz4q"></s></u><u id="orz4q"><s id="orz4q"></s></u><output id="orz4q"></output><ruby id="orz4q"></ruby><wbr id="orz4q"></wbr><ins id="orz4q"></ins><s id="orz4q"><kbd id="orz4q"></kbd></s><b id="orz4q"></b><nobr id="orz4q"></nobr><strike id="orz4q"></strike><input id="orz4q"><label id="orz4q"></label></input><em id="orz4q"></em><form id="orz4q"></form><tbody id="orz4q"><table id="orz4q"><legend id="orz4q"><dl id="orz4q"></dl></legend></table></tbody><tr id="orz4q"></tr><dd id="orz4q"></dd><li id="orz4q"></li><code id="orz4q"></code><menu id="orz4q"><samp id="orz4q"></samp></menu><p id="orz4q"><rp id="orz4q"><u id="orz4q"><strong id="orz4q"></strong></u></rp></p><pre id="orz4q"><em id="orz4q"></em></pre><tbody id="orz4q"><table id="orz4q"></table></tbody><ol id="orz4q"><p id="orz4q"><label id="orz4q"><blockquote id="orz4q"></blockquote></label></p></ol><tr id="orz4q"><option id="orz4q"></option></tr><legend id="orz4q"></legend><p id="orz4q"><rp id="orz4q"><output id="orz4q"><strong id="orz4q"></strong></output></rp></p><menu id="orz4q"></menu><rt id="orz4q"></rt><rp id="orz4q"></rp><optgroup id="orz4q"></optgroup><del id="orz4q"></del><button id="orz4q"></button><rp id="orz4q"></rp><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><thead id="orz4q"><menuitem id="orz4q"><progress id="orz4q"><noscript id="orz4q"></noscript></progress></menuitem></thead><sup id="orz4q"><acronym id="orz4q"></acronym></sup><center id="orz4q"></center><font id="orz4q"></font><noscript id="orz4q"><div id="orz4q"></div></noscript><font id="orz4q"></font><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><meter id="orz4q"></meter><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><nav id="orz4q"></nav><input id="orz4q"><label id="orz4q"><menuitem id="orz4q"><progress id="orz4q"></progress></menuitem></label></input><address id="orz4q"></address><dl id="orz4q"></dl><progress id="orz4q"></progress><video id="orz4q"></video></div> <a href="http://www.themmauniversity.com/">ÈÕº«¾«Æ·ÎÞÂëÒ»Çø¶þÇøÑÇÖÞAV_ÃÛÔÂa¢¥Å·ÃÀÈÕº«¹ú²ú¾«Æ·_±©²ÙÃÀÅ®Òõ²¿¸ß³±ÌìÁËÕÚµ²Ãâ·Ñ¿´_Å·¾«²úÆ·Ò»ÇøÒ»ÇøÈýÇø</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>