锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产日韩欧美综合久久,欧美精品久久99,亚洲激情小视频http://www.shnenglu.com/ccl0326/category/11336.htmlabout:blankzh-cnTue, 30 Mar 2010 04:56:01 GMTTue, 30 Mar 2010 04:56:01 GMT60iocp(鎴戞墍瑙佽繃璁茬殑鏈閫氫織鏄撴噦鐨勨︹︼級http://www.shnenglu.com/ccl0326/archive/2010/03/29/110911.htmlVincentVincentMon, 29 Mar 2010 13:05:00 GMThttp://www.shnenglu.com/ccl0326/archive/2010/03/29/110911.htmlhttp://www.shnenglu.com/ccl0326/comments/110911.htmlhttp://www.shnenglu.com/ccl0326/archive/2010/03/29/110911.html#Feedback0http://www.shnenglu.com/ccl0326/comments/commentRss/110911.htmlhttp://www.shnenglu.com/ccl0326/services/trackbacks/110911.html鐞嗚ВI/O Completion Port
鎽樿嚜:http://gzlyb.cnblogs.com/archive/2005/09/30/247049.aspx
      嬈㈣繋闃呰姝ょ瘒IOCP鏁欑▼銆傛垜灝嗗厛緇欏嚭IOCP鐨勫畾涔夌劧鍚庣粰鍑哄畠鐨勫疄鐜版柟娉曪紝鏈鍚庡墫鏋愪竴涓狤cho紼嬪簭鏉ヤ負(fù)鎮(zhèn)ㄦ嫧寮IOCP鐨勮皽浜戯紝闄ゅ幓浣犲績涓IOCP鐨勭儲鎭箋侽K錛屼絾鎴戜笉鑳戒繚璇佷綘鏄庣櫧IOCP鐨勪竴鍒囷紝浣嗘垜浼?xì)灏芥垜鏈澶х殑鍔姏銆備互涓嬫槸鎴戜細(xì)鍦ㄨ繖綃囨枃绔犱腑鎻愬埌鐨勭浉鍏蟲妧鏈細(xì)
銆銆I/O绔彛
銆銆鍚屾/寮傛
銆銆鍫靛/闈炲牭濉?br>銆銆鏈嶅姟绔?瀹㈡埛绔?br>銆銆澶氱嚎紼嬬▼搴忚璁?br>銆銆Winsock API 2.0
銆銆鍦ㄨ繖涔嬪墠錛屾垜鏇劇粡寮鍙戣繃涓涓」鐩紝鍏朵腑涓鍧楅渶瑕佺綉緇滄敮鎸侊紝褰撴椂榪樿冭檻鍒頒簡浠g爜鐨勫彲縐繪鎬э紝鍙浣跨敤select,connect,accept,listen,send榪樻湁recv,鍐嶅姞涓婂嚑涓?ifdef鐨勫皝瑁呬互鐢ㄦ潵澶勭悊Winsock鍜孊SD濂楁帴瀛梉socket]涓棿鐨勪笉鍏煎鎬э紝涓涓綉緇滃瓙緋葷粺鍙敤浜嗗嚑涓皬鏃跺緢灝戠殑浠g爜灝卞啓鍑烘潵浜嗭紝鑷充粖榪樿鎴戝緢鍥炲懗銆傞偅浠ュ悗寰堥暱鏃墮棿涔熷氨娌″啀紕頒簡銆?br>銆銆鍓嶄簺鏃ュ瓙錛屾垜浠瓥鍒掑仛涓涓綉緇滄父鎴忥紝鎴戜富鍔ㄦ壙鎷呬笅緗戠粶榪欎竴鍧楋紝鎯蟲兂榪欒繕涓嶆槸灝廲ase,蹇冮噷鍋風(fēng)潃涔愬晩銆傜綉緇滄父鎴忓ソ鍟婏紝緗戠粶娓告垙涓烘垚鐧句笂鍗冪殑鐜╁鎻愪緵浜嗕箰瓚e拰浠や漢鐫縐樼殑娓告垙浣撻獙錛屼粬浠湪綰夸笂浜掔浉鎴樻枟鎴栨槸鍔犲叆闃熶紞鍘繪垬鑳滃叡鍚岀殑鏁屼漢銆傛垜淇″績婊℃弧鐨勫噯澶囧紑鍐欐垜鐨勭綉緇滐紝浜庢槸涔庯紝鍙戠幇榪囧幓鐨勯樆濉炲悓姝ユā寮忔ā寮忔牴鏈笉鑳芥嬁鍒頒竴涓法閲忓鐜╁[MMP]鐨勬灦鏋勪腑鍘伙紝鐩存帴琚惁瀹氭帀浜嗐備簬鏄箮錛屽氨鏈変簡IOCP錛屽鏋滆兘榪囧緢杞繪槗鑰屼婦鐨勬悶鎺侷OCP錛屼篃灝變笉浼?xì)鏈墭q欑瘒鏁欑▼浜嗐備笅闈㈣璇鎬綅璺熼殢鎴戣繘鍏ユ棰樸?/p>

浠涔堟槸IOCP錛?br>鍏堣鎴戜滑鐪嬬湅瀵笽OCP鐨勮瘎浠?br>I/O瀹屾垚绔彛鍙兘鏄疻in32鎻愪緵鐨勬渶澶嶆潅鐨勫唴鏍稿璞°?br>[Advanced Windows 3rd] Jeffrey Richter
榪欐槸[IOCP]瀹炵幇楂樺閲忕綉緇滄湇鍔″櫒鐨勬渶浣蟲柟娉曘?br>[Windows Sockets2.0:Write Scalable Winsock Apps Using Completion Ports]
Microsoft Corporation
瀹屾垚绔彛妯″瀷鎻愪緵浜嗘渶濂界殑浼哥緝鎬с傝繖涓ā鍨嬮潪甯擱傜敤鏉ュ鐞嗘暟鐧句箖鑷充笂鍗冧釜濂楁帴瀛椼?br>[Windows緗戠粶緙栫▼2nd] Anthony Jones & Jim Ohlund
I/O completion ports鐗瑰埆鏄懼緱閲嶈錛屽洜涓哄畠浠槸鍞竴閫傜敤浜庨珮璐熻澆鏈嶅姟鍣╗蹇呴』鍚屾椂緇存姢璁稿榪炴帴綰胯礬]鐨勪竴涓妧鏈侰ompletion ports鍒╃敤涓浜涚嚎紼嬶紝甯姪騫寵 鐢盜/O璇鋒眰鎵寮曡搗鐨勮礋杞姐傝繖鏍風(fēng)殑鏋舵瀯鐗瑰埆閫傚悎鐢ㄥ湪SMP緋葷粺涓駭鐢熺殑”scalable”鏈嶅姟鍣ㄣ?br>[Win32澶氱嚎紼嬬▼搴忚璁 Jim Beveridge & Robert Wiener
 
鐪嬫潵鎴戜滑瀹屽叏鏈夌悊鐢辯浉淇OCP鏄ぇ鍨嬬綉緇滄灦鏋勭殑棣栭夈?br>閭OCP鍒板簳鏄粈涔堝憿錛?br>銆銆寰蔣鍦╓insock2涓紩鍏ヤ簡IOCP榪欎竴姒傚康 銆侷OCP鍏ㄧОI/O Completion Port錛屼腑鏂囪瘧涓篒/O瀹屾垚绔彛銆侷OCP鏄竴涓紓姝/O鐨凙PI錛屽畠鍙互楂樻晥鍦板皢I/O浜嬩歡閫氱煡緇欏簲鐢ㄧ▼搴忋備笌浣跨敤select()鎴栨槸鍏跺畠寮傛鏂規(guī)硶涓嶅悓鐨勬槸錛屼竴涓鎺ュ瓧[socket]涓庝竴涓畬鎴愮鍙e叧鑱斾簡璧鋒潵錛岀劧鍚庡氨鍙戶緇繘琛屾甯哥殑Winsock鎿嶄綔浜嗐傜劧鑰岋紝褰撲竴涓簨浠跺彂鐢熺殑鏃跺欙紝姝ゅ畬鎴愮鍙e氨灝嗚鎿嶄綔緋葷粺鍔犲叆涓涓槦鍒椾腑銆傜劧鍚庡簲鐢ㄧ▼搴忓彲浠ュ鏍稿績灞傝繘琛屾煡璇互寰楀埌姝ゅ畬鎴愮鍙c?br>銆銆榪欓噷鎴戣瀵逛笂闈㈢殑涓浜涙蹇電暐浣滆ˉ鍏咃紝鍦ㄨВ閲奫瀹屾垚]涓ゅ瓧涔嬪墠錛屾垜鎯沖厛綆鍗曠殑鎻愪竴涓嬪悓姝ュ拰寮傛榪欎袱涓蹇碉紝閫昏緫涓婃潵璁插仛瀹屼竴浠朵簨鍚庡啀鍘誨仛鍙︿竴浠朵簨灝辨槸鍚屾錛岃屽悓鏃朵竴璧峰仛涓や歡鎴栦袱浠朵互涓婁簨鐨勮瘽灝辨槸寮傛浜嗐備綘涔熷彲浠ユ嬁鍗曠嚎紼嬪拰澶氱嚎紼嬫潵浣滄瘮鍠匯備絾鏄垜浠竴瀹氳灝嗗悓姝ュ拰鍫靛錛屽紓姝ュ拰闈炲牭濉炲尯鍒嗗紑鏉ワ紝鎵璋撶殑鍫靛鍑芥暟璇稿accept(…)錛屽綋璋冪敤姝ゅ嚱鏁板悗錛屾鏃剁嚎紼嬪皢鎸傝搗錛岀洿鍒版搷浣滅郴緇熸潵閫氱煡瀹冿紝”HEY鍏勫紵錛屾湁浜鴻繛榪涙潵浜?#8221;錛岄偅涓寕璧風(fēng)殑綰跨▼灝嗙戶緇繘琛屽伐浣滐紝涔熷氨絎﹀悎”鐢熶駭鑰?娑堣垂鑰?#8221;妯″瀷銆傚牭濉炲拰鍚屾鐪嬩笂鍘繪湁涓ゅ垎鐩鎬技錛屼絾鍗存槸瀹屽叏涓嶅悓鐨勬蹇點(diǎn)傚ぇ瀹墮兘鐭ラ亾I/O璁懼鏄釜鐩稿鎱㈤熺殑璁懼錛屼笉璁烘墦鍗版満錛岃皟鍒惰В璋冨櫒錛岀敋鑷崇‖鐩橈紝涓嶤PU鐩告瘮閮芥槸濂囨參鏃犳瘮鐨勶紝鍧愪笅鏉ョ瓑I/O鐨勫畬鎴愭槸涓浠朵笉鐢氭槑鏅虹殑浜嬫儏錛屾湁鏃跺欐暟鎹殑嫻佸姩鐜囬潪甯告儕浜猴紝鎶婃暟鎹粠浣犵殑鏂囦歡鏈嶅姟鍣ㄤ腑浠thernet閫熷害鎼蛋錛屽叾閫熷害鍙兘楂樿揪姣忕涓鐧句竾瀛楄妭錛屽鏋滀綘灝濊瘯浠庢枃浠舵湇鍔″櫒涓鍙?00KB錛屽湪鐢ㄦ埛鐨勭溂鍏夋潵鐪嬪嚑涔庢槸鐬棿瀹屾垚錛屼絾鏄紝瑕佺煡閬擄紝浣犵殑綰跨▼鎵ц榪欎釜鍛戒護(hù)錛屽凡緇忔氮璐逛簡10涓竴鐧句竾嬈PU鍛ㄦ湡銆傛墍浠ヨ錛屾垜浠竴鑸嬌鐢ㄥ彟涓涓嚎紼嬫潵榪涜I/O銆傞噸鍙營O[overlapped I/O]鏄疻in32鐨勪竴欏規(guī)妧鏈紝浣犲彲浠ヨ姹傛搷浣滅郴緇熶負(fù)浣犱紶閫佹暟鎹紝騫朵笖鍦ㄤ紶閫佸畬姣曟椂閫氱煡浣犮傝繖涔熷氨鏄痆瀹屾垚]鐨勫惈涔夈傝繖欏規(guī)妧鏈嬌浣犵殑紼嬪簭鍦↖/O榪涜榪囩▼涓粛鐒惰兘澶熺戶緇鐞嗕簨鍔°備簨瀹炰笂錛屾搷浣滅郴緇熷唴閮ㄦ鏄互綰跨▼鏉ュ畬鎴恛verlapped I/O銆備綘鍙互鑾峰緱綰跨▼鎵鏈夊埄鐩婏紝鑰屼笉闇瑕佷粯鍑轟粈涔堢棝鑻︾殑浠d環(huán)銆?br>銆銆瀹屾垚绔彛涓墍璋撶殑[绔彛]騫朵笉鏄垜浠湪TCP/IP涓墍鎻愬埌鐨勭鍙o紝鍙互璇存槸瀹屽叏娌℃湁鍏崇郴銆傛垜鍒扮幇鍦ㄤ篃娌℃兂閫氫竴涓狪/O璁懼[I/O Device]鍜岀鍙IOCP涓殑Port]鏈変粈涔堝叧緋匯備及璁¤繖涓鍙d篃榪鋒儜浜嗕笉灝戜漢銆侷OCP鍙笉榪囨槸鐢ㄦ潵榪涜璇誨啓鎿嶄綔錛屽拰鏂囦歡I/O鍊掓槸鏈変簺綾諱技銆傛棦鐒舵槸涓涓鍐欒澶囷紝鎴戜滑鎵鑳借姹傚畠鐨勫彧鏄湪澶勭悊璇諱笌鍐欎笂鐨勯珮鏁堛傚湪鏂囩珷鐨勭涓夐儴鍒嗕綘浼?xì)杞昏屾槗涓劇殑鍙戠幇IOCP璁捐鐨勭湡姝g敤鎰忋?/p>

IOCP鍜岀綉緇滃張鏈変粈涔堝叧緋伙紵
int main()
{
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    ListeningSocket = socket(AF_INET, SOCK_STREAM, 0);
    bind(ListeningSocket, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr));
    listen(ListeningSocket, 5);
    int nlistenAddrLen = sizeof(ClientAddr);
    while(TRUE)
    {
        NewConnection = accept(ListeningSocket, (SOCKADDR*)&ClientAddr, &nlistenAddrLen);
        HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, (void*) NewConnection, 0, &dwTreadId);
        CloseHandle(hThread);
    }
    return 0;
}
銆銆鐩鎬俊鍙鍐欒繃緗戠粶鐨勬湅鍙嬶紝搴旇瀵硅繖鏍風(fēng)殑緇撴瀯鍦ㄧ啛鎮(zhèn)変笉榪囦簡銆俛ccept鍚庣嚎紼嬭鎸傝搗錛岀瓑寰呬竴涓鎴峰彂鍑鴻姹傦紝鑰屽悗鍒涘緩鏂扮嚎紼嬫潵澶勭悊璇鋒眰銆傚綋鏂扮嚎紼嬪鐞嗗鎴瘋姹傛椂錛岃搗鍒濈殑綰跨▼寰幆鍥炲幓絳夊緟鍙︿竴涓鎴瘋姹傘傚鐞嗗鎴瘋姹傜殑綰跨▼澶勭悊瀹屾瘯鍚庣粓緇撱?br>銆銆鍦ㄤ笂榪扮殑騫跺彂妯″瀷涓紝瀵規(guī)瘡涓鎴瘋姹傞兘鍒涘緩浜嗕竴涓嚎紼嬨傚叾浼樼偣鍦ㄤ簬絳夊緟璇鋒眰鐨勭嚎紼嬪彧闇鍋氬緢灝戠殑宸ヤ綔銆傚ぇ澶氭暟鏃墮棿涓紝璇ョ嚎紼嬪湪浼戠湢[鍥犱負(fù)recv澶勪簬鍫靛鐘舵乚銆?br>銆銆浣嗘槸褰撳茍鍙戞ā鍨嬪簲鐢ㄥ湪鏈嶅姟鍣ㄧ[鍩轟簬Windows NT]錛學(xué)indows NT灝忕粍娉ㄦ剰鍒拌繖浜涘簲鐢ㄧ▼搴忕殑鎬ц兘娌℃湁棰勬枡鐨勯偅涔堥珮銆傜壒鍒殑錛屽鐞嗗緢澶氬悓鏃剁殑瀹㈡埛璇鋒眰鎰忓懗鐫寰堝綰跨▼騫跺彂鍦拌繍琛屽湪緋葷粺涓傚洜涓烘墍鏈夎繖浜涚嚎紼嬮兘鏄彲榪愯鐨刐娌℃湁琚寕璧峰拰絳夊緟鍙戠敓浠涔堜簨]錛孧icrosoft鎰忚瘑鍒癗T鍐呮牳鑺辮垂浜嗗お澶氱殑鏃墮棿鏉ヨ漿鎹㈣繍琛岀嚎紼嬬殑涓婁笅鏂嘯Context]錛岀嚎紼嬪氨娌℃湁寰楀埌寰堝CPU鏃墮棿鏉ュ仛瀹冧滑鐨勫伐浣溿?br>銆銆澶у鍙兘涔熼兘鎰熻鍒板茍琛屾ā鍨嬬殑鐡墮鍦ㄤ簬瀹冧負(fù)姣忎竴涓鎴瘋姹傞兘鍒涘緩浜嗕竴涓柊綰跨▼銆傚垱寤虹嚎紼嬫瘮璧峰垱寤鴻繘紼嬪紑閿瑕佸皬錛屼絾涔熻繙涓嶆槸娌℃湁寮閿鐨勩?br>銆銆鎴戜滑涓嶅Θ璁炬兂涓涓嬶細(xì)濡傛灉浜嬪厛寮濂絅涓嚎紼嬶紝璁╁畠浠湪閭old[鍫靛]錛岀劧鍚庡彲浠ュ皢鎵鏈夌敤鎴風(fēng)殑璇鋒眰閮芥姇閫掑埌涓涓秷鎭槦鍒椾腑鍘匯傜劧鍚庨偅N涓嚎紼嬮愪竴浠庢秷鎭槦鍒椾腑鍘誨彇鍑烘秷鎭茍鍔犱互澶勭悊銆傚氨鍙互閬垮厤閽堝姣忎竴涓敤鎴瘋姹傞兘寮綰跨▼銆備笉浠呭噺灝戜簡綰跨▼鐨勮祫婧愶紝涔熸彁楂樹簡綰跨▼鐨勫埄鐢ㄧ巼銆傜悊璁轟笂寰堜笉閿欙紝浣犳兂鎴戠瓑娉涙硾涔嬭緢閮借兘鎯沖嚭鏉ョ殑闂錛孧icrosoft鍙堟庝細(xì)娌℃湁鑰冭檻鍒板憿 !
銆銆榪欎釜闂鐨勮В鍐蟲柟娉曞氨鏄竴涓О涓篒/O瀹屾垚绔彛鐨勫唴鏍稿璞★紝浠栭嬈″湪Windows NT3.5涓寮曞叆銆?br>銆銆鍏跺疄鎴戜滑涓婇潰鐨勬瀯鎯沖簲璇ュ氨宸笉澶氭槸IOCP鐨勮璁℃満鐞嗐傚叾瀹炶絀夸簡IOCP涓嶅氨鏄竴涓秷鎭槦鍒楀槢錛佷綘璇磋繖鍜孾绔彛]榪欎袱瀛楁湁浣曡仈緋匯傛垜鐨勭悊瑙e氨鏄疘OCP鏈澶氭槸搴旂敤紼嬪簭鍜屾搷浣滅郴緇熸矡閫氱殑涓涓帴鍙g艦浜嗐?br>銆銆鑷充簬IOCP鐨勫叿浣撹璁¢偅鎴戜篃寰堥毦璇村緱涓婃潵錛屾瘯绔熸垜娌$湅榪囧疄鐜扮殑浠g爜錛屼絾浣犲畬鍏ㄥ彲浠ヨ繘琛屾ā鎷燂紝鍙笉榪囨ц兘鍙兘…錛屽鏋滄兂娣卞叆鐞嗚ВIOCP錛?Jeffrey Ritchter鐨凙dvanced Windows 3rd鍏朵腑絎?3绔犲拰絎?4寮犳湁寰堝瀹濊吹鐨勫唴瀹癸紝浣犲彲浠ユ嬁鏉ョ瑙嗕竴涓嬬郴緇熸槸濡備綍瀹屾垚榪欎竴鍒囩殑銆?br> 
瀹炵幇鏂規(guī)硶
Microsoft涓篒OCP鎻愪緵浜嗙浉搴旂殑API鍑芥暟錛屼富瑕佺殑灝變袱涓紝鎴戜滑閫愪竴鐨勬潵鐪嬩竴涓嬶細(xì)
HANDLE CreateIoCompletionPort (
    HANDLE FileHandle,                            // handle to file
    HANDLE ExistingCompletionPort,          // handle to I/O completion port
    ULONG_PTR CompletionKey,               // completion key
    DWORD NumberOfConcurrentThreads  // number of threads to execute concurrently
);
鍦ㄨ璁哄悇鍙傛暟涔嬪墠錛岄鍏堣娉ㄦ剰璇ュ嚱鏁板疄闄呯敤浜庝袱涓埅鐒朵笉鍚岀殑鐩殑錛?br>1錛庣敤浜庡垱寤轟竴涓畬鎴愮鍙e璞?br>2錛庡皢涓涓彞鏌刐HANDLE]鍜屽畬鎴愮鍙e叧鑱斿埌涓璧?br>銆銆鍦ㄥ垱寤轟竴涓畬鎴愪竴涓鍙g殑鏃跺欙紝鎴戜滑鍙渶瑕佸~鍐欎竴涓婲umberOfConcurrentThreads榪欎釜鍙傛暟灝卞彲浠ヤ簡銆傚畠鍛婅瘔緋葷粺涓涓畬鎴愮鍙d笂鍚屾椂鍏佽榪愯鐨勭嚎紼嬫渶澶ф暟銆傚湪榛樿鎯呭喌涓嬶紝鎵寮綰跨▼鏁板拰CPU鏁伴噺鐩稿悓錛屼絾緇忛獙緇欐垜浠竴涓叕寮忥細(xì)
銆銆綰跨▼鏁?= CPU鏁?* 2 + 2
瑕佷嬌瀹屾垚绔彛鏈夌敤錛屼綘蹇呴』鎶婂畠鍚屼竴涓垨澶氫釜璁懼鐩稿叧鑱斻傝繖涔熸槸璋冪敤CreateIoCompletionPort瀹屾垚鐨勩備綘瑕佸悜璇ュ嚱鏁頒紶閫掍竴涓凡鏈夌殑瀹屾垚绔彛鐨勫彞鏌勶紝鎴戜滑鏃㈢劧瑕佸鐞嗙綉緇滀簨浠訛紝閭d篃灝辨槸灝嗗鎴風(fēng)殑socket浣滀負(fù)HANDLE浼犺繘鍘匯傚拰涓涓畬鎴愰敭[瀵逛綘鏈夋剰涔夌殑涓涓?2浣嶅鹼紝涔熷氨鏄竴涓寚閽堬紝鎿嶄綔緋葷粺騫朵笉鍏沖績浣犱紶浠涔圿銆傛瘡褰撲綘鍚戠鍙e叧鑱斾竴涓澶囨椂錛岀郴緇熷悜璇ュ畬鎴愮鍙g殑璁懼鍒楄〃涓姞鍏ヤ竴鏉′俊鎭邯褰曘?br>鍙︿竴涓狝PI灝辨槸
BOOL GetQueuedCompletionStatus(
    HANDLE CompletionPort,            // handle to completion port
    LPDWORD lpNumberOfBytes,      // bytes transferred
    PULONG_PTR lpCompletionKey,   // file completion key
    LPOVERLAPPED *lpOverlapped,   // buffer
    DWORD dwMilliseconds       銆     // optional timeout value
);
絎竴涓弬鏁版寚鍑轟簡綰跨▼瑕佺洃瑙嗗摢涓涓畬鎴愮鍙c傚緢澶氭湇鍔″簲鐢ㄧ▼搴忓彧鏄嬌鐢ㄤ竴涓狪/O瀹屾垚绔彛錛屾墍鏈夌殑I/O璇鋒眰瀹屾垚浠ュ悗鐨勯氱煡閮藉皢鍙戠粰璇ョ鍙c傜畝鍗曠殑璇達(dá)紝GetQueuedCompletionStatus浣胯皟鐢ㄧ嚎紼嬫寕璧鳳紝鐩村埌鎸囧畾鐨勭鍙g殑I/O瀹屾垚闃熷垪涓嚭鐜頒簡涓欏規(guī)垨鐩村埌瓚呮椂銆傚悓I/O瀹屾垚绔彛鐩稿叧鑱旂殑絎?涓暟鎹粨鏋勬槸浣跨嚎紼嬪緱鍒板畬鎴怚/O欏逛腑鐨勪俊鎭細(xì)浼犺緭鐨勫瓧鑺傛暟錛屽畬鎴愰敭鍜孫VERLAPPED緇撴瀯鐨勫湴鍧銆傝淇℃伅鏄氳繃浼犻掔粰GetQueuedCompletionSatatus鐨刲pdwNumberOfBytesTransferred錛宭pdwCompletionKey鍜宭pOverlapped鍙傛暟榪斿洖緇欑嚎紼嬬殑銆?br>鏍規(guī)嵁鍒扮洰鍓嶄負(fù)姝㈠凡緇忚鍒扮殑涓滆タ錛岄鍏堟潵鏋勫緩涓涓猣rame銆備笅闈負(fù)鎮(zhèn)ㄨ鏄庝簡濡備綍浣跨敤瀹屾垚绔彛鏉ュ紑鍙戜竴涓猠cho鏈嶅姟鍣ㄣ傚ぇ鑷村涓嬶細(xì)
銆銆1.鍒濆鍖朩insock
銆銆2.鍒涘緩涓涓畬鎴愮鍙?br>銆銆3.鏍規(guī)嵁鏈嶅姟鍣ㄧ嚎紼嬫暟鍒涘緩涓瀹氶噺鐨勭嚎紼嬫暟
銆銆4.鍑嗗濂戒竴涓猻ocket榪涜bind鐒跺悗listen
銆銆5.榪涘叆寰幆accept絳夊緟瀹㈡埛璇鋒眰
銆銆6.鍒涘緩涓涓暟鎹粨鏋勫綰硈ocket鍜屽叾浠栫浉鍏充俊鎭?br>銆銆7.灝嗚繛榪涙潵鐨剆ocket鍚屽畬鎴愮鍙g浉鍏寵仈
銆銆8.鎶曢掍竴涓噯澶囨帴鍙楃殑璇鋒眰
浠ュ悗灝變笉鏂殑閲嶅5鑷?鐨勮繃紼?br>閭eソ錛屾垜浠敤鍏蜂綋鐨勪唬鐮佹潵灞曠ず涓涓嬬粏鑺傜殑鎿嶄綔銆?br>銆銆鑷蟲鏂囩珷涔熻鍛婁竴孌佃惤浜?鎴戝甫鐫鎮(zhèn)ㄥ仛浜嗕竴瓚熸棆椋庤埇鐨勬梾娓?娓歌浜嗘墍璋撶殑瀹屾垚绔彛銆?br> 



Vincent 2010-03-29 21:05 鍙戣〃璇勮
]]>
<杞?gt;c++鏅鴻兘鎸囬拡鐨勫垱寤?涓漢瑙夊緱璁茬殑瓚呰禐&娓呮櫚)http://www.shnenglu.com/ccl0326/archive/2010/03/18/109974.htmlVincentVincentThu, 18 Mar 2010 05:08:00 GMThttp://www.shnenglu.com/ccl0326/archive/2010/03/18/109974.htmlhttp://www.shnenglu.com/ccl0326/comments/109974.htmlhttp://www.shnenglu.com/ccl0326/archive/2010/03/18/109974.html#Feedback0http://www.shnenglu.com/ccl0326/comments/commentRss/109974.htmlhttp://www.shnenglu.com/ccl0326/services/trackbacks/109974.htmlzero 鍧愬湪槨愭鍓嶏紝鏈烘鐨勯噸澶?#8220;澶硅彍 -> 鍜鍤?-> 鍚炲捊”鐨勫姩浣滃簭鍒楋紝鑴鎬笂鐢ㄦ棤褰㈢殑澶у瓧鍐欑潃錛氭垜蹇冧笉鍦ㄧ剦銆傚湪浠栫殑瀵歸潰鍧愮潃 Solmyr 錛屾參鏉℃柉鐞嗙殑鍚冪潃浠栭偅浠藉崍槨愶紝緇存寔鐫浠栦竴璐緢鏈変慨鍏葷殑褰㈣薄 鈥斺斺?鎴栬呮寜鐓?zero 榪欎簺鐔熸?zhèn)変粬鏈川鐨勪汉鐨勮娉曞Q氬亣璞°?/p>

“鎬庝箞浜?zero 錛熻儍鍙d笉濂戒箞錛?#8221;錛屽熀鏈~楗辮倸瀛愪箣鍚庯紝Solmyr 瑙夊緱浼間箮搴旇鍏沖績涓涓嬩粬鐨勫寰掍簡銆?/p>

“鍛冿紝娌′粈涔堬紝鍙槸 …… Solmyr 錛孋++ 涓轟粈涔堜笉鏀寔鍨冨溇鏀墮泦鍛紵錛堟敞錛氬瀮鍦炬敹闆嗘槸涓縐嶆満鍒訛紝淇濊瘉鍔ㄦ佸垎閰嶄簡鐨勫唴瀛樺潡浼?xì)鑷姩閲婃斁锛孞ava 絳夎璦鏀寔榪欎竴鏈哄埗銆傦級”

Solmyr 鍙逛簡鍙f皵錛岀敤涓縐嶅鉤闈欑殑鐪肩鐩潃 zero 錛?#8220;鏄笉鏄湪 BBS 涓婂拰浜哄惖 C++ 鍜?Java 鍝釜鏇村ソ錛熻屼笖鍚佃緭浜嗭紵鎴戞棭鍛婅瘔榪囦綘錛岃繖縐嶄簤璁哄啀鏃犺亰涓嶈繃浜嗐?#8221;

“鍛?…… 鏄?#8221;錛寊ero 涓嶅緱涓嶆壙璁?鈥斺斺?Solmyr 鐨勭溂紲炶櫧鐒朵竴鐐逛篃涓嶉攼鍒╋紝浣嗘槸鍗磋帿鍚嶅叾濡欑殑璁?zero 浜х敓浜嗗井寰殑鎭愭儳鎰熴?/p>

“鑰屼笖錛岃皝鍛婅瘔浣?C++ 涓嶆敮鎸佸瀮鍦炬敹闆嗙殑錛?#8221;

“鍟婏紒Solmyr 浣犱笉鏄紑鐜╃瑧鍚э紵錛?#8221;

“zero 浣犲緱杞彉涓涓嬭蹇點(diǎn)傛垜闂綘錛孋++ 鏀笉鏀寔鍙互鍔ㄦ佹敼鍙樺ぇ灝忕殑鏁扮粍錛?#8221;

“榪?…… 濂借薄涔熸病鏈夊惂錛?#8221;

“閭?vector 鏄粈涔堜笢瑗匡紵”

“鍛?……”

“鏀寔涓縐嶇壒鎬э紝騫朵笉鏄闈炲緱鎶婅繖涓壒鎬у姞鍒拌娉曢噷鍘伙紝鎴戜滑涔熷彲浠ラ夋嫨鐢ㄧ幇鏈夌殑璇█鏈哄埗瀹炵幇涓涓簱鏉ユ敮鎸佽繖涓壒寰併備互鍨冨溇鏀墮泦涓轟緥錛岃繖閲屾垜浠殑浠誨姟鏄淇濊瘉姣忎竴涓鍔ㄦ佸垎閰嶇殑鍐呭瓨鍧楅兘鑳藉琚噴鏀撅紝涔熷氨鏄 ……”錛孲olmyr 涓嶇煡浠庡摢閲屾壘鍑轟簡涓寮犵焊銆佷竴鏀瑪錛屽啓鍒幫細(xì)

 

int* p = new int; // 1
delete p; // 2

 

“涔熷氨鏄錛屽浜庢瘡涓涓?1 錛屾垜浠淇濊瘉鏈変竴涓?2 琚皟鐢紝1 鍜?2 蹇呴』鎴愬鍑虹幇銆傛垜鏉ラ棶浣狅紝C++ 涓湁浠涔堜笢瑗挎槸鐢辮璦鏈韓淇濊瘉涓瀹氭垚瀵瑰嚭鐜扮殑錛?#8221;

“……”錛寊ero 闇插嚭浜嗗姫鍔涙悳绱㈣蹇嗙殑琛ㄦ儏錛屼笉榪囧緢鏄庢樉涓鏃犳墍鑾楓?/p>

“鎻愮ず涓涓嬶紝鍜岀被鐨勫垱寤烘湁鍏熾?#8221;

“鍝︼紒鏋勯犲嚱鏁頒笌鏋愭瀯鍑芥暟錛?#8221;

“姝g‘銆傚彲鎯滄櫘閫氭寚閽堟病鏈夋瀯閫犲嚱鏁頒笌鏋愭瀯鍑芥暟錛屾墍浠ユ垜浠繀欏昏鍐欎竴涓被鏉ュ姞涓灞傚寘瑁咃紝鏈綆鍗曠殑灝辮薄榪欐牱錛?#8221;

 

class my_intptr
{
    public:
    int* m_p;

    my_intptr(int* p){ m_p = p; }
    ~my_intptr(){ delete m_p; }
};

…………

my_intptr pi(new int);
*(pi.m_p) = 10;

…………

 

“榪欓噷鎴戜滑鍙互鏀懼績鐨勪嬌鐢?my_intptr 錛屼笉鐢ㄦ媴蹇冨唴瀛樻硠婕忕殑闂錛氫竴鏃?pi 榪欎釜鍙橀噺琚攢姣侊紝鎴戜滑鐭ラ亾 pi.p 鎸囧悜鐨勫唴瀛樺潡涓瀹氫細(xì)琚噴鏀俱備笉榪囧鏋滄瘡嬈′嬌鐢?my_intptr 閮藉緱鍘昏闂畠鐨勬垚鍛樻湭鍏嶅お楹葷儲浜嗐備負(fù)姝わ紝鍙互緇欒繖涓被鍔犱笂閲嶈澆鐨?* 榪愮畻絎︼細(xì)”

 

class my_intptr
{
    private:
        int* m_p;

    public:
        my_intptr(int* p){ m_p = p; }
        ~my_intptr(){ delete m_p; }

        int& operator*(){ return *m_p; }
};

…………

my_intptr pi;
*pi = 10;
int a = *pi;

…………

 

“鐜板湪鏄笉鏄湅璧鋒潵 my_intptr 灝卞儚鏄竴涓湡姝g殑鎸囬拡浜嗭紵姝e洜涓哄姝わ紝榪欑鎶鏈縐頒負(fù)鏅鴻兘鎸囬拡銆傜幇鍦ㄦ垜闂綘錛岃繖涓被榪樼己灝戝摢浜涗笢瑗匡紵”

zero 鐨辯潃鐪夊ご錛岀溂鐫涗竴鐪ㄤ竴鐪紝鐪嬩笂鍘誨氨鍍忎竴鍙版參閫熺數(shù)鑴戞鍦ㄨ緵鑻︾殑寰瀹冪殑紜洏涓婃嫹璐濇枃浠躲傝壇涔咃紝zero 鎶搗澶存潵錛屼笉澶‘瀹氱殑璇達(dá)細(xì)“鏄笉鏄繕緙哄皯涓涓嫹璐濇瀯閫犲嚱鏁板拰涓涓祴鍊艱繍綆楃錛?#8221;

“璇磋涓轟粈涔堛?#8221;錛孲olmyr 鏄劇劧涓嶆墦綆楀氨榪欐牱鏀捐繃 zero銆?/p>

“鍥犱負(fù) …… 鎴戣寰楁病閿欑殑璇?…… 銆?0 璇?銆嬶紙娉細(xì)鎸囥奅ffective C++ 2/e銆嬩竴涔︼級涓彁鍒拌繃錛屽鏋滀綘鐨勭被閲岄潰鏈夋寚閽堟寚鍚戝姩鎬佸垎閰嶇殑鍐呭瓨錛岄偅涔堜竴瀹氳涓哄畠鍐欎竴涓嫹璐濇瀯閫犲嚱鏁板拰涓涓祴鍊艱繍綆楃 …… 鍥犱負(fù) …… 鍚﹀垯鐨勮瘽錛屼竴鏃︿綘鍋氫簡璧嬪鹼紝浼?xì)瀵艰嚧涓や釜瀵硅薄鐨勬寚閽堟寚鍚戝悓涓鍧楀唴瀛樸傚浜嗭紒濡傛灉鏄笂闈㈢殑綾伙紝榪欐牱涓鏉ヤ細(xì)瀵艱嚧鍚屼竴涓寚閽堣 delete 涓ゆ錛?#8221;

“姝g‘銆傞偅涔堟垜浠簲璇ユ庢牱鏉ュ疄鐜板憿錛?#8221;

“榪欑畝鍗曪紝鎴戜滑鐢?memcpy 鎶婄洰鏍囨寚閽堟寚鍚戠殑鍐呭瓨涓殑鍐呭鎷瘋礉榪囨潵銆?#8221;

“濡傛灉鎴戜滑鐨勬櫤鑳芥寚閽堟寚鍚戜竴涓被鐨勫璞℃庝箞鍔烇紵娉ㄦ剰錛岀被鐨勫璞′腑鍙兘鏈夋寚閽堬紝涓嶈兘鐢?memcpy銆?#8221;

“閭?…… 鎴戜滑鐢ㄦ嫹璐濇瀯閫犵殑鍔炴硶銆?#8221;

“濡傛灉鎴戜滑鐨勬櫤鑳芥寚閽堟寚鍚戠殑瀵硅薄涓嶈兘鎷瘋礉鏋勯犳庝箞鍔烇紵瀹冨彲鑳芥湁涓涓鏈夌殑鎷瘋礉鏋勯犲嚱鏁般?#8221;

“閭?……”錛寊ero 欏夸簡涓欏匡紝鍐沖畾鑰佸疄鎵胯錛?#8220;鎴戜笉鐭ラ亾銆?#8221;

“闂鍦ㄥ摢浣犵煡閬撲箞錛熷湪浜庝綘娌℃湁鎶婃櫤鑳芥寚閽堢湅浣滄寚閽堛傛兂璞′竴涓嬶紝濡傛灉鎴戜滑瀵逛竴涓寚閽堝仛璧嬪鹼紝瀹冪殑鍚箟鏄粈涔堬紵”

“鍛冿紝鎴戞槑鐧戒簡錛屽湪榪欑鎯呭喌涓嬶紝搴旇鎯沖姙娉曡涓や釜鏅鴻兘鎸囬拡鎸囧悜鍚屼竴涓璞?…… 鍙槸 Solmyr 錛岃繖鏍蜂互鏉ュ矀涓嶆槸浠嶇劧瑕佸鍚屼竴涓璞″垹闄や袱閬嶏紵”

“鏄殑錛屾垜浠緱鎯沖姙娉曡В鍐寵繖涓棶棰橈紝鍔炴硶涓嶅彧涓縐嶃傛瘮杈冨ソ鐨勪竴縐嶆槸涓烘瘡涓寚閽堢淮鎶や竴涓紩鐢ㄨ鏁板鹼紝姣忔璧嬪兼垨鑰呮嫹璐濇瀯閫狅紝灝辮璁℃暟鍊煎姞涓錛岃繖鎰忓懗鐫鎸囧悜榪欎釜鍐呭瓨鍧楃殑鏅鴻兘鎸囬拡鍙堝浜嗕竴涓紱鑰屾瘡鏈変竴涓櫤鑳芥寚閽堣閿姣侊紝灝辮璁℃暟鍊煎噺涓錛岃繖鎰忓懗鐫鎸囧悜榪欎釜鍐呭瓨鍧楃殑鏅鴻兘鎸囬拡灝戜簡涓涓紱涓鏃﹁鏁板間負(fù) 0 錛屽氨閲婃斁鍐呭瓨鍧椼傝薄榪欐牱錛?#8221;

 

class my_intptr
{
    private:
        int* m_p;
        int* m_count;

    public:
        my_intptr(int* p)
        {
             m_p = p;
             m_count = new int;

            // 鍒濆鍖栬鏁板間負(fù) 1
            *m_count = 1;
        }
        my_intptr(const my_intptr& rhs) // 鎷瘋礉鏋勯犲嚱鏁?
       {
            m_p = rhs.m_p; // 鎸囧悜鍚屼竴鍧楀唴瀛?
            m_count = rhs.m_count; // 浣跨敤鍚屼竴涓鏁板?
           (*m_count)++; // 璁℃暟鍊煎姞 1
       }
       ~my_intptr()
      {
           (*m_count)--; // 璁℃暟鍊煎噺 1
          if( *m_count == 0 ) // 宸茬粡娌℃湁鍒殑鎸囬拡鎸囧悜璇ュ唴瀛樺潡浜?
         {
              delete m_p;
              delete m_count;
         }
      }

      my_intptr& operator=(const my_intptr& rhs)
     {
          if( m_p == rhs.m_p ) // 棣栧厛鍒ゆ柇鏄惁鏈潵灝辨寚鍚戝悓涓鍐呭瓨鍧?
                return *this; // 鏄垯鐩存帴榪斿洖

          (*m_count)--; // 璁℃暟鍊煎噺 1 錛屽洜涓鴻鎸囬拡涓嶅啀鎸囧悜鍘熸潵鍐呭瓨鍧椾簡
         if( *m_count == 0 ) // 宸茬粡娌℃湁鍒殑鎸囬拡鎸囧悜鍘熸潵鍐呭瓨鍧椾簡
         {
              delete m_p;
              delete m_count;
          }

          m_p = rhs.m_p; // 鎸囧悜鍚屼竴鍧楀唴瀛?
          m_count = rhs.m_count; // 浣跨敤鍚屼竴涓鏁板?
         (*m_count)++; // 璁℃暟鍊煎姞 1
    }

…………
};

 

“鍏朵粬閮ㄥ垎娌℃湁浠涔堝お澶у彉鍖栵紝鎴戜笉璐逛簨浜嗐傜幇鍦ㄦ兂璞′竴涓嬫垜浠庢牱浣跨敤榪欑鏅鴻兘鎸囬拡錛?#8221;錛孲olmyr 鏀句笅浜嗙瑪錛屽啀嬈℃嬁璧蜂簡絳峰瓙錛屾湁浜涙儖鎯滅殑鍙戠幇浠栫埍鍚冪殑鑲変父瀛愬凡緇忓喎浜嗐?/p>

zero 鎯寵薄鐫錛屾湁浜涜繜鐤戙?#8220;鎴戜滑 …… 鍙互鐢?new int 琛ㄨ揪寮忎綔涓烘瀯閫犲嚱鏁扮殑鍙傛暟鏉ユ瀯閫犱竴涓櫤鑳芥寚閽堬紝鐒跺悗 …… 鐒跺悗鎴戜滑鍙互浠繪剰鐨勮祴鍊鹼紝”錛屼粬寮濮嬫姄浣忎簡鎬濊礬錛岃秺璇磋秺蹇紝“浠繪剰鐨勭敤宸茬粡瀛樺湪鐨勬櫤鑳芥寚閽堟潵鏋勯犳柊鐨勬櫤鑳芥寚閽堬紝鏅鴻兘鎸囬拡鐨勮祴鍊艱繍綆楃銆佹嫹璐濇瀯閫犲嚱鏁板拰鏋愭瀯浼?xì)淇濊瘉璁℃暟鍊煎緇堢瓑浜庢寚鍚戣鍐呭瓨鍧楃殑鏅鴻兘鎸囬拡鏁般?#8221;zero 浼間箮鏄庣櫧浜嗕粬鐪嬪埌浜嗘庢牱鐨勫姛鑳斤紝寮濮嬫縺鍔ㄨ搗鏉ワ細(xì)“鐒跺悗涓鏃﹁鏁板間負(fù) 0 琚垎閰嶇殑鍐呭瓨鍧楀氨浼?xì)閲婃斁锛佷篃灏辨槸璇?…… 鏈夋寚閽堟寚鍚戝唴瀛樺潡錛屽畠?yōu)兏嶉噴鏀惧Q屼竴鏃︽病鏈夛紝瀹冨氨鑷姩閲婃斁錛佸お媯掍簡錛佹垜浠彧瑕佷竴寮濮嬫紜殑鍒濆鍖栨櫤鑳芥寚閽堬紝灝卞彲浠ヨ薄鏅氭寚閽堥偅鏍蜂嬌鐢ㄥ畠錛岃屼笖瀹屽叏涓嶇敤鎷呭績鍐呭瓨閲婃斁鐨勯棶棰橈紒澶浜嗭紒”zero 嬋鍔ㄧ殑澶у彨錛?#8220;榪欏氨鏄瀮鍦炬敹闆嗭紒Solmyr 錛佹垜浠湪楗涓婂疄鐜頒簡涓涓瀮鍦炬敹闆嗗櫒錛?#8221;

Solmyr 寰堟槑鏄炬病鏈夊垎浜?zero 鐨勬縺鍔細(xì)“鎴戝湪鍚冮キ錛屼綘鑳戒笉鑳戒笉瑕佸ぇ鍙?#8216;楗涓婂疄鐜頒簡涓涓瀮鍦炬敹闆嗗櫒’榪欑鍊掕儍鍙g殑璇濓紵”欏夸簡涓欏匡紝Solmyr 甯︾潃浠栨嫑鐗屽紡鐨勫潖絎戯紝浠ヤ竴縐嶅彲鎭剁殑鍙e惢璇撮亾錛?#8220;鑰屼笖璇鋒敞鎰忎竴涓嬭嚜宸辯殑褰㈣薄銆?#8221;

“鍡紵”錛寊ero 鍥炶繃紲炴潵錛屽彂鐜拌嚜宸變笉鐭ヤ粈涔堟椂鍊欑珯浜嗚搗鏉ワ紝鑰屾暣涓鍘呴噷鐨勪漢閮藉湪鐪嬬潃浠栧樋鍢垮伔絎戯紝榪欒浠栨劅瑙夎嚜宸卞儚涓偦鐡溿?/p>

zero 綰㈢潃鑴稿潗涓嬶紝鍘嬩綆浜嗗0闊抽棶 Solmyr 錛?#8220;涓嶈繃 Solmyr 錛岃繖紜疄鏄竴涓殑鍨冨溇鏀墮泦鏈哄埗鍟婏紝鍙鎴戜滑鎶婅繖涓被鏀規(guī)垚 …… 鍡?…… 鏀規(guī)垚妯℃澘綾伙紝璞¤繖鏍鳳細(xì)”zero 鎶撹繃浜嗙焊絎旓紝鍐欏埌錛?/p>

 

template <typename T>
class my_ptr
{
    private:
    T* m_p;
    int* m_count;
    …………
};

 

“瀹冧笉灝辮兘鏀寔浠繪剰綾誨瀷鐨勬寚閽堜簡鍚楋紵鎴戜滑灝卞彲浠ユ妸瀹冪敤鍦ㄤ換浣曞湴鏂廣?#8221;

Solmyr 鎽囦簡鎽囧ご錛?#8220;涓嶏紝浣犳妸闂鎯崇殑澶畝鍗曚簡銆傚浜庣畝鍗曠殑綾誨瀷錛岃繖涓被紜疄鍙互澶勭悊鐨勫緢濂斤紝浣嗗疄闄呮儏鍐墊槸寰堝鏉傜殑銆傝冭檻涓涓吀鍨嬫儏鍐碉細(xì)綾?Derived 鏄被 Base 鐨勬淳鐢熺被錛屾垜浠笇鏈涜繖鏍瘋祴鍊鹼細(xì)”

Base* pb;
Derived pd;
…………
pb = pd;

“浣犲掕璇寸湅錛岃繖縐嶆儏鍐碉紝鎬庢牱鏀圭敤涓婇潰榪欎釜鏅鴻兘鎸囬拡鏉ュ鐞嗭紵”

“……”錛寊ero 娌夐粯浜嗐?/p>

“瑕佸疄鐜頒竴涓畬鏁寸殑鍨冨溇鏀墮泦鏈哄埗騫朵笉瀹規(guī)槗錛屽洜涓烘湁璁稿緇嗚妭瑕佽冭檻銆?#8221;錛孲olmyr 寮濮嬫葷粨浜嗭紝“涓嶈繃錛屽熀鏈濊礬灝辨槸涓婇潰璇寸殑榪欎簺銆傚煎緱搴嗗垢鐨勬槸錛岀洰鍓嶅凡緇忔湁浜嗕竴涓浉褰撴垚鐔熺殑‘寮曠敤璁℃暟’鏅鴻兘鎸囬拡錛宐oost::shared_ptr銆傚ぇ澶氭暟鎯呭喌涓嬶紝鎴戜滑閮藉彲浠ヤ嬌鐢ㄥ畠銆傚彟澶栵紝闄や簡鏅鴻兘鎸囬拡涔嬪錛岃繕鏈変竴浜涙妧鏈篃鑳藉甯姪鎴戜滑閬垮紑閲婃斁鍐呭瓨鐨勯棶棰橈紝姣斿鍐呭瓨姹犮備絾鏄紝鍏抽敭鍦ㄤ簬 鈥斺斺?”

Solmyr 鍐嶅害鐢ㄩ偅縐嶅鉤闈欑殑鐪肩鐩潃 zero 錛?/p>

“韜負(fù) C/C++ 紼嬪簭鍛橈紝蹇呴』鏈夊垱閫犲姏銆傞偅縐嶈漢鍦ㄨ璦鏈哄埗涓婁笉鎬濊繘鍙栫殑浜猴紝閭g蹇呴』瑕侀潬璇硶寮哄埗鎵嶇煡閬撴庢牱緙栫▼鐨勪漢錛岄偅縐嶆病鏈夊埆浜哄憡璇変粬璇ュ共浠涔堝氨鏃犳墍閫備粠鐨勪漢錛屼笉閫傚悎榪欓棬璇█銆?#8221;

 

 

嬈㈣繋璁塊棶姊︽柇閰掗啋鐨勫崥瀹細(xì)http://www.yanzhijun.com

 

鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/ishallwin/archive/2009/09/08/4533145.aspx



Vincent 2010-03-18 13:08 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美视频一区二区| 久久综合久久综合九色| 欧美日韩一卡二卡| 日韩一区二区久久| 在线视频一区二区| 国产丝袜美腿一区二区三区| 久久精品国产亚洲精品| 久久免费高清视频| 一区二区91| 午夜精品国产| 亚洲天堂av图片| 欧美与欧洲交xxxx免费观看| 国内成+人亚洲| 亚洲国产高清一区| 欧美jizzhd精品欧美巨大免费| 亚洲激情av| 亚洲综合色丁香婷婷六月图片| 国产一区 二区 三区一级| 欧美大片一区二区三区| 欧美无乱码久久久免费午夜一区| 欧美一级专区免费大片| 毛片基地黄久久久久久天堂| 亚洲天堂网在线观看| 久久不射网站| 亚洲夜间福利| 免费不卡在线视频| 午夜亚洲福利| 欧美大尺度在线| 久久久国产一区二区三区| 欧美激情精品久久久久久| 久久黄色影院| 欧美三级不卡| 亚洲第一在线| 国产自产女人91一区在线观看| 亚洲伦理久久| 亚洲激情在线观看视频免费| 亚洲欧美区自拍先锋| 日韩一级在线观看| 欧美 日韩 国产一区二区在线视频 | 欧美日韩综合在线| 欧美ab在线视频| 国产精品亚洲视频| 亚洲精品一区二区在线| 在线观看久久av| 欧美影片第一页| 销魂美女一区二区三区视频在线| 欧美激情一区二区三区高清视频| 久久久噜噜噜久久狠狠50岁| 国产精品一区免费在线观看| 9色精品在线| 亚洲视频在线看| 欧美日韩999| 亚洲经典在线看| 亚洲精品美女在线观看播放| 麻豆成人精品| 亚洲成人在线免费| 亚洲第一天堂av| 欧美在线视频观看免费网站| 午夜精品美女久久久久av福利| 欧美日韩123| 99在线|亚洲一区二区| 一本色道久久综合亚洲精品小说 | 一本色道久久精品| 亚洲精品国产精品国产自| 久久精品一区| 久久亚洲风情| 伊人精品久久久久7777| 久久一区二区三区国产精品 | 久久嫩草精品久久久精品一| 国产欧美大片| 性欧美大战久久久久久久免费观看| 亚洲欧美日韩中文视频| 国产欧美一区二区精品性色| 欧美在线视频二区| 免费观看久久久4p| 亚洲精品久久在线| 欧美日韩亚洲国产精品| 亚洲在线中文字幕| 久久久久这里只有精品| 亚洲国产精品电影在线观看| 欧美激情片在线观看| 一本大道久久精品懂色aⅴ| 午夜精品福利一区二区蜜股av| 国产精品一区二区在线观看网站| 久久av资源网| 亚洲国产综合在线| 午夜欧美不卡精品aaaaa| 狠狠久久五月精品中文字幕| 女女同性女同一区二区三区91| 日韩亚洲综合在线| 久久久人人人| 一本色道久久88综合亚洲精品ⅰ | 亚洲免费在线精品一区| 国产婷婷一区二区| 欧美va亚洲va香蕉在线| 亚洲私拍自拍| 欧美成人免费全部观看天天性色| av成人免费| 韩日精品中文字幕| 欧美日韩久久| 久久免费精品视频| 亚洲午夜精品国产| 欧美国产精品v| 午夜精品久久久久久99热软件| 在线国产欧美| 国产精品青草久久| 欧美激情四色 | 夜夜嗨av一区二区三区| 久久综合九色综合欧美就去吻| 一区二区三区精品国产| 一区视频在线看| 国产精品三级视频| 欧美日韩成人在线观看| 久久久久久久999精品视频| 亚洲视频第一页| 亚洲区免费影片| 免费久久99精品国产自在现线 | 国语自产在线不卡| 欧美视频一区二区三区| 美国十次成人| 久久久精品日韩欧美| 亚洲一区二区在线免费观看| 亚洲日本一区二区三区| 免费在线看成人av| 久久久欧美精品| 久久激情综合网| 校园激情久久| 国产精品一区久久| 免费成人av在线| 久久免费国产| 久久一区精品| 久久久另类综合| 久久久精品国产免费观看同学| 亚洲欧美日韩区| 午夜久久影院| 香蕉尹人综合在线观看| 亚洲欧美成人综合| 亚洲字幕在线观看| 亚洲一区二区三区四区在线观看| 99精品免费视频| 日韩亚洲不卡在线| 99精品欧美| 亚洲欧美日韩一区| 午夜视频一区| 久久久www| 美女任你摸久久| 欧美—级高清免费播放| 欧美精品在线观看一区二区| 欧美精品乱码久久久久久按摩| 欧美国产丝袜视频| 欧美日韩另类国产亚洲欧美一级| 欧美日本在线看| 国产精品男人爽免费视频1| 国产精品区一区二区三区| 国产欧美成人| 亚洲国产高清一区| 99精品久久久| 欧美一区亚洲二区| 免费久久99精品国产自| 91久久久亚洲精品| 亚洲视频精选| 久久国产精品久久久久久久久久| 久久久久久午夜| 欧美日韩国产麻豆| 国产日本欧洲亚洲| 亚洲精品国产品国语在线app | 国产女同一区二区| 在线成人免费视频| 中日韩午夜理伦电影免费| 亚洲欧美成人一区二区在线电影| 久久精品盗摄| 亚洲国产日韩欧美综合久久| 亚洲午夜高清视频| 老牛影视一区二区三区| 欧美日韩不卡| 激情久久久久久久| 中国成人黄色视屏| 久久久综合网| 在线视频你懂得一区二区三区| 欧美一区二区三区在线看| 欧美成人激情在线| 国产视频丨精品|在线观看| 亚洲日本久久| 久久精品国产成人| 日韩一级片网址| 久久综合久久综合这里只有精品| 欧美午夜精品理论片a级大开眼界| 国产亚洲精品一区二区| 亚洲色图制服丝袜| 欧美寡妇偷汉性猛交| 午夜精品影院| 欧美视频福利| 日韩午夜在线视频| 蜜臀av国产精品久久久久| 亚洲影视在线| 欧美色欧美亚洲另类二区| 亚洲狠狠丁香婷婷综合久久久| 欧美资源在线观看| 一区二区欧美在线| 欧美激情按摩|