锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Lua涓璏etatable榪欎釜姒傚康, 鍥藉唴灝嗕粬緲昏瘧涓哄厓琛? 鍏冭〃涓洪噸瀹氫箟Lua涓換鎰忎竴涓璞?鍊?鐨勯粯璁よ涓烘彁渚涗簡涓縐嶅叕寮鍏ュ彛. 濡傚悓璁稿OO璇█鐨勬搷浣滅閲嶈澆鎴栨柟娉曢噸杞? Metatable鑳藉涓烘垜浠甫鏉ラ潪甯哥伒媧葷殑緙栫▼鏂瑰紡.
鍏蜂綋鐨勮, Lua涓瘡縐嶇被鍨嬬殑鍊奸兘鏈夐兘鏈変粬鐨勯粯璁ゆ搷浣滄柟寮? 濡? 鏁板瓧鍙互鍋氬姞鍑忎箻闄ょ瓑鎿嶄綔, 瀛楃涓插彲浠ュ仛榪炴帴鎿嶄綔, 鍑芥暟鍙互鍋氳皟鐢ㄦ搷浣? 琛ㄥ彲浠ュ仛琛ㄩ」鐨勫彇鍊艱祴鍊兼搷浣? 浠栦滑閮介伒寰繖浜涙搷浣滅殑榛樿閫昏緫鎵ц, 鑰岃繖浜涙搷浣滃彲浠ラ氳繃Metatable鏉ユ敼鍙? 濡? 浣犲彲浠ュ畾涔?涓〃濡備綍鐩稿姞絳?
鐪嬩竴涓渶綆鍗曠殑渚嬪瓙, 閲嶅畾涔変簡2涓〃鐨勫姞娉曟搷浣? 榪欎釜渚嬪瓙涓皢c鐨刜_add鍩熸敼鍐欏悗灝哸鐨凪etatable璁劇疆涓篶, 褰撴墽琛屽埌鍔犳硶鐨勬搷浣滄椂, Lua棣栧厛浼氭鏌鏄惁鏈塎etatable騫朵笖Metatable涓槸鍚﹀瓨鍦╛_add鍩? 濡傛灉鏈夊垯璋冪敤, 鍚﹀垯灝嗘鏌鐨勬潯浠?鍜宎鐩稿悓), 濡傛灉閮芥病鏈夊垯璋冪敤榛樿鍔犳硶榪愮畻, 鑰宼able娌℃湁瀹氫箟榛樿鍔犳硶榪愮畻, 鍒欎細鎶ラ敊.
鏈変簡涓劅鎬х殑璁よ瘑鍚? 鎴戜滑鐪嬬湅Metatable鐨勫叿浣撶壒鎬?
Metatable騫朵笉紲炵, 浠栧彧鏄竴涓櫘閫氱殑table, 鍦╰able榪欎釜鏁版嵁緇撴瀯褰撲腑, Lua瀹氫箟浜嗚澶氶噸瀹氫箟榪欎簺鎿嶄綔鐨勫叆鍙? 浠栦滑鍧囦互鍙屼笅鍒掔嚎寮澶翠負table鐨勫煙, 濡備笂闈緥瀛愮殑__add. 褰撲綘涓轟竴涓艱緗簡Metatable, 騫跺湪Metatable涓緗簡閲嶅啓浜嗙浉搴旂殑鎿嶄綔鍩? 鍦ㄨ繖涓兼墽琛岃繖涓搷浣滅殑鏃跺欏氨浼氳Е鍙戦噸鍐欑殑鑷畾涔夋搷浣? 褰撶劧姣忎釜鎿嶄綔閮芥湁姣忎釜鎿嶄綔鐨勬柟娉曟牸寮忕鍚? 濡俖_add浼氬皢鍔犲彿涓よ竟鐨勪袱涓搷浣滄暟鍋氫負鍙傛暟浼犲叆騫朵笖瑕佹眰涓涓繑鍥炲? 鏈変漢鎶婅繖鏍風殑琛屼負姣斾綔浜嬩歡, 褰搙x琛屼負瑙﹀彂浼氭縺媧諱簨浠惰嚜瀹氫箟鎿嶄綔.
鍦↙ua涓換浣曚竴涓奸兘鏈塎etatable, 涓嶅悓鐨勫煎彲浠ユ湁涓嶅悓鐨凪etatable涔熷彲浠ュ叡浜悓鏍風殑Metatable, 浣嗗湪Lua鏈韓鎻愪緵鐨勫姛鑳戒腑, 涓嶅厑璁鎬綘鏀瑰彉闄や簡table綾誨瀷鍊煎鐨勪換浣曞叾浠栫被鍨嬪肩殑Metatable, 闄ら潪浣跨敤C鎵╁睍鎴栧叾浠栧簱. setmetatable鍜実etmetatable鏄敮涓涓緇勬搷浣渢able綾誨瀷鐨凪etatable鐨勬柟娉?
Metatable涓庨潰鍚戝璞?/strong>
Lua鏄釜闈㈠悜榪囩▼鐨勮璦, 浣嗛氳繃Metatable鍙互妯℃嫙鍑洪潰鍚戝璞$殑鏍峰瓙. 鍏跺叧閿氨鍦ㄤ簬__index榪欎釜鍩? 浠栨彁渚涗簡琛ㄧ殑绱㈠紩鍊煎叆鍙? 榪欏緢鍍忛噸鍐機#涓殑绱㈠紩鍣? 褰撹〃瑕佺儲寮曚竴涓兼椂濡倀able[key], Lua浼氶鍏堝湪table鏈韓涓煡鎵緆ey鐨勫? 濡傛灉娌℃湁騫朵笖榪欎釜table瀛樺湪涓涓甫鏈塤_index灞炴х殑Metatable, 鍒橪ua浼氭寜鐓_index鎵瀹氫箟鐨勫嚱鏁伴昏緫鏌ユ壘. 浠旂粏鎯蟲兂, 榪欎笉姝d負闈㈠悜瀵硅薄涓殑鏍稿績鎬濇兂緇ф壙, 鎻愪緵浜嗗疄鐜版柟寮忎箞. Lua涓疄鐜伴潰鍚戝璞$殑鏂瑰紡闈炲父澶? 浣嗘棤璁哄摢縐嶉兘紱諱笉寮__index.
榪欎釜渚嬪瓙涓垜浣跨敤浜哖rogramming In Lua涓殑瀹炵幇OO鐨勬柟寮? 寤虹珛浜咮ird(楦?瀵硅薄, 鎷ユ湁浼氶鐨勫睘鎬? 鍏朵粬楦熷璞″熀浜庢鍘熷瀷, Ostrich(楦甸笩)鏄笩鐨勪竴縐嶄絾涓嶄細椋? 緇撴灉寰堟槑鏄? Bird鍜孫strich鍒嗗埆鏈夌嫭绔嬬殑鐘舵?
涓嬭澆婧愪唬鐮侊細http://www.lua.org/ftp/lua-5.2.1.tar.gz
瑙e帇澶囩敤銆?span style="padding: 0px; margin: 0px;">榪欓噷璇村彞棰樺璇濓紝lauxlib.h 鍜?nbsp;lauxlib.c 鎴戣涓轟篃搴旇鏄畼鏂圭殑澶辮錛屾湰鎰忓簲璇ユ槸 luaxlib.h 鍜?luaxlib.c 鍚э紵
鏂板緩涓涓?static library 宸ョ▼錛屾妸瑙e帇寰楀埌鐨勭洰褰曚笅鐨剆rc瀛愮洰褰曚腑鐨勬墍鏈?h鍜?c鏂囦歡鎷瘋礉鍒版柊宸ョ▼鐩綍涓嬨?/p>
宸ョ▼涓垹闄よ嚜鍔ㄧ敓鎴愮殑 main.c 鏂囦歡錛屾坊鍔犺繘闄ua.c銆乴uac.c鍜?/span>lua.hpp澶?/span>鐨勬墍鏈?h鍜?c鏂囦歡銆?/p> 緙栬瘧錛屽緱鍒?nbsp;libLua.a 鍗蟲槸搴撱傛敞鎰忥紝濡傛灉浣犳病鏈夐噸璁捐繃杈撳嚭鐩綍錛岃繖涓?liblua.a 鏂囦歡搴旇鍦ㄤ綘鐨勬簮浠g爜鐩綍閲屻?/span> 鐒跺悗鎶?nbsp;libLua.a 鏀懼埌緙栬瘧鍣ㄧ殑 Lib 鐩綍涓嬶紝鎶?nbsp; lauxlib.h銆乴ua.h銆乴uaconf.h銆乴ualib.h 鏀懼埌緙栬瘧鍣ㄧ殑 include 鐩綍涓嬶紙C++鐢ㄦ埛鍐嶆坊鍔犱釜 lua.hpp錛夛紝鏈濂芥柊寤轟釜 lua 瀛愮洰褰曞瓨鏀懼ご鏂囦歡鏇存竻鏅般?/span> 鍙﹀瑕佹敞鎰忥細lua 5.2.1 鍒涘緩涓涓寚鍚慙ua瑙i噴鍣ㄧ殑鎸囬拡鐨勫嚱鏁?nbsp;lua_open 淇敼涓?luaL_newstate銆?br style="padding: 0px; margin: 0px;" />鍗蟲妸宸ョ▼浠巐ua5.1搴撹漿鍒?.2搴撴椂錛屽湪璋冪敤 lua_open() 鐨勫湴鏂歸兘闇瑕佷慨鏀?/span>涓?luaL_newstate()銆?/p> 鏈榪戝湪涓庝竴浣嶆葷粡鐞嗕氦嫻佺殑鏃跺欙紝浠栬皥鍒頒粬浠叕鍙哥殑杞歡鐮斿彂綆$悊錛岃錛?#8220;鎴戜滑鍏徃鏈澶х殑闂鏄」鐩笉鑳芥寜鏃跺畬鎴愶紝鎬昏涓鎷栧啀鎷栥?#8221;浠栭棶鎴戞湁浠涔堝姙娉曡兘鏀瑰彉榪欎釜澧冨喌銆備粠榪欐牱涓涓棶棰樺紑濮嬶紝鍦ㄩ殢鍚庣殑浜よ皥涓紝鍙堝紩鍑轟粬涓榪炰覆鍦ㄨ蔣浠剁爺鍙戠鐞嗕腑鐨勯亣鍒扮殑闂錛屽寘鎷細 . 鐜版湁浠g爜璐ㄩ噺涓嶉珮錛屾柊鏉ョ殑寮鍙戜漢鍛樻帴鎵嬫椂瀹佹効閲嶅啓錛屼篃涓嶆効鎰忕湅鍒漢鐣欎笅鐨?#8220;鐑?#8221;浠g爜錛屾庝箞鍔烇紵 . 閲嶆瀯浼氶犳垚鍥為錛屾庢牱閬垮厤錛?/strong> . 鏈変簺寮鍙戜漢鍛樻按騫崇浉瀵逛笉楂橈紝濡備綍淇濊瘉浠栦滑鐨勪唬鐮佽川閲忥紵 . 杞歡鐮斿彂鍒板簳闇涓嶉渶瑕佹枃妗o紵 . 瑕佹眰鎻愪氦浠g爜鍓嶅仛Code Review錛岃屽紑鍙戜漢鍛樹笉鍋氾紝鎴栨暦琛嶄簡浜嬶紝鎬庝箞鍔烇紵 . 褰撴湁寮鍙戜漢鍛樺湪寮鍙戣繃紼嬩腑閬囧埌闅鵑錛屽伐浣滄棤娉曠戶緇紝鍥犺屾嫋寤惰繘搴︼紝鎬庝箞瑙e喅錛?/strong> . 濡備綍鎻愰珮寮鍙戜漢鍛樼殑涓昏鑳藉姩鎬э紵 鍏跺疄錛屾瘡涓蔣浠剁爺鍙戝洟闃熺殑綆$悊鑰呴兘闈復鐫鎴栨浘緇忛潰涓磋繃榪欎簺闂錛屼篃閮芥湁鐫鑷繁鐨勭鐞?#8220;濂楄礬”鏉ュ簲瀵硅繖浜涢棶棰樸傛垜鎶婃垜鐨?#8220;濂楄礬”鍐嶆緄彣緄彣銆?/p> 1. 欏圭洰涓嶈兘鎸夋椂瀹屾垚錛屾昏涓鎷栧啀鎷栵紝鎬庝箞鏀瑰彉錛?/strong> 鎵捐В鍐沖姙娉曞墠錛屽綋鐒惰鍏堢煡閬撻棶棰樹負浠涔堜細鍑虹幇銆傝繖浣嶆葷粡鐞嗚錛?#8220;鎬諱細涓嶆柇鍦版湁闇姹傝鏀瑰彉鍜屾柊闇姹傛彁鍑烘潵錛屼嬌鍘熸潵鐨勫紑鍙戣鍒掍笉寰椾笉寤墮暱銆?#8221;鍘熸潵濡傛銆傜煡閬撴牴婧愶紝褰撶劧瑙e喅鍔炴硶涔熷氨鏈変簡錛岄偅灝辨槸“鏁忔嵎”銆傛晱鎹峰紑鍙戝洜鍏惰凱浠o紙Iterative錛夊拰澧為噺錛圛ncremental錛夌殑鎬濇兂涓庡疄璺碉紝姝eソ閫傚悎“闇姹傜粡甯稿彉鍖栧拰澧炲姞”鐨勯」鐩拰浜у搧銆傚湪鎴戣榪頒簡鏁忔嵎鐨勪竴浜涙蹇碉紝鐗瑰埆鏄疭crum鐨勬鏋跺悗錛屾葷粡鐞嗕篃琛ㄧず浜嗗“鏁忔嵎”鐨勮鍚屻?/p> 鍏跺疄浠旂粏鎯蟲兂錛岃繖閲岄潰榪樻湁涓涓潪甯告櫘閬嶇殑闂銆傚浜庝駭鍝佺殑浜や粯鏃墮棿鎴栭」鐩殑瀹屾垚鏃墮棿錛屽線寰鐢遍珮綰х鐞嗗眰鏍規嵁甯傚満鎯呭喌鍐崇瓥鍜岀‘瀹氥傚湪寰堝杞歡浼佷笟涓紝榪欎簺鍐崇瓥鑰呭湪鍐崇瓥鏃跺線寰蹇界暐浜嗕竴涓噸瑕佺殑鍙傛暟錛岄偅灝辨槸鍥㈤槦鐨勭敓浜х巼錛圴elocity錛夈傜敓浜х巼闇瑕侀噺鍖栵紝鑰屼笉鏄?#8220;鎷嶈剳闂ㄥ瓙”鎰熻鍑烘潵鐨勩傛晱鎹峰紑鍙戜腑鏈夊叧浜庡浣曚及綆楃敓浜х巼鐨勬柟娉曘傛墍浠ヤ嬌鐢ㄦ晱鎹鳳紝鍦ㄤ及綆椾駭鍝佷氦浠樻椂闂存垨欏圭洰瀹屾垚鏃墮棿鏃訛紝鏄浉瀵硅緝鍑嗙‘鐨勩係crum鍒涘浜轟箣涓鐨凧eff Sutherland璇達紝浠栧湪涓涓闄╂姇璧勫洟闃熷仛鏁忔嵎鏁欑粌鏃訛紝鍥㈤槦涓殑璧勬繁鍚堜紮浜轟細鍚戞墍鏈夌殑寰呮姇璧勪紒涓氶棶鍚屼竴涓棶棰橈細“浣犱滑鏄惁娓呮鍥㈤槦鐨勭敓浜х巼錛?#8221;鑰岃繖浜涗紒涓氶兘寰堥毦鍋氬嚭鏄庣‘鐨勭瓟澶嶃傝蔣浠朵紒涓氳鎯崇粰浜у搧瀹氫竴涓緝瀹為檯鐨勪氦浠樻棩鏈燂紝灝遍鍏堣寮勬竻妤氳嚜宸辯殑杞歡鐢熶駭鐜囥?/p> 2. 鐜版湁浠g爜璐ㄩ噺涓嶉珮錛屾柊鏉ョ殑寮鍙戜漢鍛樻帴鎵嬫椂瀹佹効閲嶅啓錛屼篃涓嶆効鎰忕湅鍒漢鐣欎笅鐨?#8220;鐑?#8221;浠g爜錛屾庝箞鍔烇紵 榪欏彲鑳芥槸寰堝杞歡寮鍙戝伐紼嬪笀閮芥湁榪囩殑浣撻獙錛屽湪鎺ユ墜鍒漢鐨勪唬鐮佹椂錛岀湅涓嶆噦銆佹棤娉曞姞鏂板姛鑳斤紝璇諱唬鐮佽鐨勫ご鐤箋傝繖璇存槑浠涔堬紵鎺掗櫎鎺ユ墜浜轟釜浜烘按騫崇殑鍥犵礌錛岃繖璇存槑鏃т唬鐮佸彲璇繪с佸彲鎵╁睍鎬ф瘮杈冨樊銆傛庝箞鍔烇紵榪欐椂錛屼篃璁擱噸鏋勬槸涓縐嶄袱鍏ㄥ叾緹庣殑鍔炴硶銆傛帴鎵嬩漢閲嶆瀯浠g爜錛屾棦鑳芥敼鍠勬棫浠g爜鐨勫彲璇繪у拰鍙墿灞曟э紝鍙堜笉鑷充簬鍥犻噸鍐欎唬鐮佸甫鏉ョ殑鏃墮棿涓婄殑椋庨櫓銆?/p> 浠庢帴鎵嬩漢蹇冪悊鐨勮搴︾湅錛岄噸鏋勮繕鏈変竴涓ソ鐨勫壇浣滅敤錛屽氨鏄唬鐮侀噸鏋勪箣鍚庯紝鎺ユ墜浜鴻寰楅偅浜涘師鏉ョ殑“鐑?#8221;浠g爜琚慨鏀規垚涓鴻嚜宸卞紩浠ヨ嚜璞殑鏂版垚灝便傘奡crum鏁忔嵎杞歡寮鍙戙嬬殑浣滆匨ike Cohn鍐欏埌榪囷細“鎴戠殑濂沖効浠敾浜嗕竴騫呯壒鍒護浜鴻禐鍙圭殑鏉頒綔鍚庯紝濂逛滑浼氬皢瀹冧粠瀛︽牎甯﹀洖瀹訛紝騫舵兂鎶婂畠灞曠ず鍦ㄤ竴涓槑鏄劇殑浣嶇疆錛屼篃灝辨槸鍐扮涓婇潰銆傛湁涓澶╋紝鍦ㄥ伐浣滀腑錛屾垜鐢–++浠g爜瀹炵幇浜嗘煇涓壒鍒湁鐢ㄧ殑絳栫暐妯″紡鐨勭▼搴忋傚洜涓烘垜璁ゅ畾鍐扮闂ㄩ傚悎灞曠ず鎴戜滑寮曚互涓鴻豹鐨勪換浣曚笢瑗匡紝鎵浠ユ垜灝卞皢瀹冩斁涓婂幓浜嗐傚鏋滄垜浠竴鐩村鑷繁宸ヤ綔鐨勮川閲忕壒鍒嚜璞紝鍙互楠勫偛鍦板皢瀹冨拰瀛╁瓙鐨勮壓鏈搧涓鏍峰睍紺哄湪鍐扮涓婏紝閭d笉鏄緢濂藉悧錛?#8221;鎵浠ヨ繖涓Н鏋佺殑淇冭繘浣滅敤錛屽皢浣垮緱鎺ユ墜浜烘劅瑙変慨鏀圭殑浠g爜鏄嚜宸辯殑浜嗭紝鑰屼笖鏈熸湜鑳藉鎵懼埌鏇村鐨勫彲浠ラ噸鏋勭殑涓滆タ銆?/p> 3. 閲嶆瀯浼氶犳垚鍥為錛屾庢牱閬垮厤錛?/strong> 閲嶆瀯紜疄寰堝鏄撻犳垚鍥為錛圧egression錛夈傝繖鏃訛紝閲嶆瀯浼氳搗鍒頒笌鍏跺垵琛風浉鍙嶇殑浣滅敤銆傛墍浠ユ垜浠簲璇ュ敖鍙兘澶氬湴澧炲姞鍗曞厓嫻嬭瘯銆傛湁浜涜佷駭鍝侊紝鏃т唬鐮侊紝鍙兘娌℃湁鎴栬呮病鏈夐偅涔堝鐨勫崟鍏冩祴璇曘備絾鎴戜滑鑷沖皯瑕佸湪閲嶆瀯鍓嶏紝澧炲姞瀵硅閲嶆瀯閮ㄥ垎浠g爜鐨勫崟鍏冩祴璇曘傚熀浜庨噸鏋勭洰鐨勭殑鍗曞厓嫻嬭瘯錛屽簲璇ラ伒寰互涓嬬殑鍘熷垯錛堣銆婇噸鏋勩嬬4绔狅細鏋勭瓚嫻嬭瘯浣撶郴錛夛細 - 緙栧啓鏈嚮瀹屽杽鐨勬祴璇曞茍瀹為檯榪愯錛屽ソ榪囧瀹岀編嫻嬭瘯鐨勬棤灝界瓑寰呫傛祴璇曞簲璇ユ槸涓縐嶉闄╅┍鍔ㄨ涓猴紝鎵浠ヤ笉瑕佸幓嫻嬭瘯閭d簺浠呬粎璇誨啓涓涓煎煙鐨勮闂嚱鏁幫紝搴斾負瀹冧滑澶畝鍗曚簡錛屼笉澶у彲鑳藉嚭閿欍?/p> - 鑰冭檻鍙兘鍑洪敊鐨勮竟鐣屾潯浠訛紝鎶婃祴璇曠伀鍔涢泦涓湪鍝効銆傛壆婕?#8220;紼嬪簭鍏晫”錛岀旱瀹逛綘蹇冩櫤涓瘮杈冧績鐙殑閭d竴閮ㄥ垎錛岀Н鏋佹濊冨浣曠牬鍧忎唬鐮併?/p> - 褰撲簨鎯呰鍏搴旇浼氬嚭閿欐椂錛屽埆蹇樹簡媯鏌ユ槸鍚︽湁寮傚父濡傛湡琚姏鍑恒?/p> - 涓嶈鍥犱負“嫻嬭瘯鏃犳硶鎹曟崏鎵鏈塀ug”錛屽氨涓嶆挵鍐欐祴璇曚唬鐮侊紝鍥犱負嫻嬭瘯鐨勭‘鍙互鎹曟崏鍒板ぇ澶氭暟Bug銆?/p> - “鑺卞悎鐞嗘椂闂存姄鍑哄ぇ澶氭暟Bug”瑕佸ソ榪?#8220;絀峰敖涓鐢熸姄鍑烘墍鏈塀ug”銆傚洜涓哄綋嫻嬭瘯鏁伴噺杈懼埌涓瀹氱▼搴︿箣鍚庯紝嫻嬭瘯鏁堢泭灝變細鍛堢幇閫掑噺鎬佸娍錛岃岄潪鎸佺畫閫掑銆?/p> 璇村埌銆婇噸鏋勩嬭繖鏈功錛屽叾瀹炲湪姣忎釜閲嶆瀯鏂規硶涓兘鏈?#8220;浣滄硶錛圡echanics錛?#8221;涓孌碉紝鍦ㄩ噸鏋勭殑瀹炶返涓寜鐓т笂闈㈡墍榪扮殑姝ラ榪涜鏄瘮杈冪ǔ濡ョ殑錛屽悓鏃朵篃鑳介伩鍏嶅緢澶氫笉緇忔剰闂村埗閫犵殑鍥為鍑虹幇銆?/p> 4. 瑕佹眰鎻愪氦浠g爜鍓嶅仛Code Review錛岃屽紑鍙戜漢鍛樹笉鍋氾紝鎴栨暦琛嶄簡浜嬶紝鎬庝箞鍔烇紵 濡傛灉姣忎釜寮鍙戜漢鍛橀兘鏄Н鏋佷富鍔ㄧ殑錛孋ode Review鐨勪綔鐢ㄨ兘钀藉埌瀹炲銆備絾濡傛灉涓嶆槸鍛紵鍥㈤槦綆$悊鑰呴渶瑕佷竴浜涙墜孌典績浣垮叾鏈夋晥鍦拌繘琛孋ode Review銆傞鍏堬紝鎴戜滑閲囩敤鐨凜ode Review鏈?縐嶅艦寮忥紝涓鏄疧ver-the-shoulder錛屼篃灝辨槸2涓漢搴у湪涓璧鳳紝涓涓漢璁詫紝鍙︿竴涓漢瀹℃煡銆備簩鏄敤宸ュ叿Code Collaborator鏉ヨ繘琛屻傛棤璁哄摢縐嶅艦寮忥紝鍦ㄦ彁浜や唬鐮佹椂錛屽繀欏繪敞鏄庡叧浜庡鏌ョ殑淇℃伅錛屾瘮濡傦細瀹℃煡鑰咃紙Reviewer錛夌殑鍚嶅瓧鎴栧鏌ュ彿錛圧eview ID錛孋ode Collaborator鑷姩鐢熸垚錛夛紝姣忓ぉ鐢變竴鍚嶄笓鑱屼漢鍛樻潵媯鏌hecklist涓殑姣忎竴鏉★紝鐪嬫槸鍚︽湁浜烘紡鍐欒繖浜涗俊鎭紝濡傛灉鍙戠幇浼氭彁閱掓彁浜ょ殑浜鴻ˉ涓娿傚彟澶栵紝鏌愭鎻愪氦鐨勪唬鐮佸嚭闂錛屾彁浜よ呭拰瀹℃煡鑰呴兘瑕佷竴璧鋒潵瑙e喅鍑虹幇鐨勯棶棰橈紝浠ユ渶澶ч檺搴﹂伩鍏嶅鏌ヨ繃紼嬫暦琛嶄簡浜嬨?/p> 鍗氫富Inovy鍦ㄦ煇涓瘎璁鴻鐨勫緢褰㈣薄錛?#8220;鏈紙娌★級鏈夎祻緗氱殑鍒跺害錛屽氨鏄甫鍒板帟鎵鐨勬姤綰革紝鐪嬪畬灝卞彲浠ョ敤鏉ユ摝灞佽偂浜嗐?#8221;娌℃湁濂栨儵鍒跺害浣滀繚璇侊紝褰撶劧涓婇潰鐨勮姹傛病鏈変粈涔堟晥鍔涖傛墍浠ワ紝褰撴湁浜虹粡甯鎬笉瀹℃煡灝辨彁浜わ紝鎴栧鏌ユ椂涓嶈礋璐d換錛屽畠鐨勭嘩鏁堣瘎瀹氬氨浼氬洜姝や綆涓鐐癸紝鑰岀嘩鏁堢殑璇勫垎鏄窡姣忓勾宸ヨ祫娑ㄨ惤鎸傞挬鐨勩傝鐧戒簡錛屽彲鑳芥煇涓漢浼氬洜涓哄嬈¤鏌ュ嚭娌℃湁鍋欳ode Review灝辨彁浜や唬鐮侊紝鑰屽埌騫村簳鍔犺柂鏃舵瘮鍒漢灝戞定500鍧楅挶銆?/p> 5. 杞歡鐮斿彂鍒板簳闇涓嶉渶瑕佹枃妗o紵 杞歡鐮斿彂闇瑕佹枃妗g殑璧峰師鍙兘鏈?縐嶏紝涓鏄瘮杈冨師濮嬬殑錛岄渶瑕佹枃妗f槸涓轟簡褰撳紑鍙戜漢鍛樼鑱屽悗錛屼紒涓氶渶瑕佹帴鎵嬬殑浜鴻兘鏍規嵁鏂囨。浜嗚В浠栨墍鎺ユ墜鐨勪唬鐮佹垨妯″潡鐨勮璁°備簩鏄緝楂樺眰嬈$殑錛屼紒涓氶伒浠嶪SO9001璐ㄩ噺綆$悊浣撶郴鎴朇MMI銆?/p> 瀵逛簬絎竴縐嶏紝鏍規簮鍙兘鏉ヨ嚜浜庝袱涓柟闈細 - 鍘熷紑鍙戜漢鍛樿璁$紪鐮佹按騫充笉楂橈紝鍏朵唬鐮佸彲璇繪ц緝宸?/p> - 璁捐鎬濇兂鍜屼唬鐮佸彧鏈変竴涓漢浜嗚В錛屾浜轟竴鏃︾鑱岋紝鏃犱漢鐭ラ亾鍏剁粏鑺傘?/p> 鍦ㄧ紪鐮佸墠鍐欎竴浜涚畝鍗曠殑璁捐鏂囨。錛屾湁鍔╀簬鐞嗘竻鎬濊礬錛屽挨鍏舵槸杈呬互涓浜沀ML鍥撅紝鍦ㄤ氦嫻佹椂涔熸槸鏈夊ソ澶勭殑銆備絾鍚屾椂錛屾垜浠篃搴旇鎻愰珮寮鍙戜漢鍛樼殑緙栫爜姘村鉤澧炲姞鍏朵唬鐮佺殑鍙鎬э紝姣斿澧炲己鍏跺彉閲忓懡鍚嶇殑鍙鎬с佺敤涓浜涜澶у鎵浜嗚В鐨勮璁℃ā寮忔潵鏇夸唬鎸夎嚜宸辨煇浜涚嫭鐗規濊礬緙栧啓鐨勪唬鐮併佸鍔犲拰鏀硅繘娉ㄩ噴絳夌瓑錛屼互鍑忓皯涓嶅繀瑕佺殑鏂囨。銆傚彟澶栨帹琛屼唬鐮佺殑闆嗕綋鎵鏈夋潈錛圕ollective Ownership錛夛紝閬垮厤鏌愪簺浠g爜鍙涓涓漢浜嗚В錛岃繖鏍峰彲浠ュ噺灝戜互姝や負鐩殑鑰岀紪鍐欑殑鏂囨。銆?/p> 瀵逛簬絎簩縐嶏紝鎯呭喌鏈変簺澶嶆潅銆傛帴瑙﹁繃鏁忔嵎寮鍙戠殑浜洪兘鐭ラ亾銆婃晱鎹峰璦銆嬩腑鐨?#8220;鍙互宸ヤ綔鐨勮蔣浠惰儨浜庨潰闈勘鍒扮殑鏂囨。”銆傛帴瑙﹁繃CMMI寮鍙戞垨鑰匢SO9001璐ㄩ噺綆$悊浣撶郴鐨勪漢鐭ラ亾瀹冧滑瀵規枃妗g殑瑕佹眰鏄涔堢殑楂樸傚畠浠湅璧鋒潵姘寸伀涓嶇浉瀹廣備絾鏄紝瀹冧滑鐨勫畻鏃ㄦ槸涓鑷寸殑錛屽嵆錛氭瀯寤洪珮璐ㄩ噺鐨勪駭鍝併?/p> 瀵逛簬鏁忔嵎錛屼嬌鐢ㄦ墜鍐欑敤鎴鋒晠浜嬫潵璁板綍闇姹傚拰浼樺厛綰х殑鏂規硶錛屼互鍙婂湪鐧芥澘涓婂啓鐢葷殑闈炴寮忚璁★紝鏄笉鑳介氳繃ISO9001鐨勫鏍哥殑錛屼絾褰撴妸瀹冧滑澶嶅嵃銆佹媿鐓с佸鍔犲簭鍙楓佷繚瀛樺悗錛屽彲浠ラ氳繃瀹℃牳銆傛瘡嬈¢兘鏄垚鍔熺殑Daily Build鍜孉uto Test鎶ュ憡鏃犳硶璇佹槑瀹冧滑鏄惁鐪熸琚墽琛屽茍鐪熸鎴愬姛錛屾墍浠ヤ笉鑳介氳繃ISO9001鐨勫鏍搞備絾娣誨姞涓涓柇璦澶辮觸錛堢被浼糰ssert(false)鐨勬柇璦錛夌殑嫻嬭瘯鍚庯紝鍒欏彲浠ラ氳繃瀹℃牳銆?/p> CMMI涓庢晱鎹蜂篃鏄簰琛ョ殑錛屽墠鑰呭憡璇夌粍緇囧湪鎬諱綋鏉℃涓婂仛浠涔堬紝浣嗘槸娌℃湁璇村浣曞幓鍋氾紝鍚庤呮槸涓濂楁渶浣沖疄璺點係CRUM涔嬬被鐨勬晱鎹鋒柟娉曚篃琚紩鍏ヨ繃閭d簺宸查氳繃CMMI5綰ц瘎浼扮殑緇勭粐銆傚緢澶氫紒涓氬繕璁頒簡鏈緇堢洰鏍囨槸鏀硅繘浠栦滑鏋勫緩杞歡鍙婇掍氦浜у搧鐨勬柟寮忥紝鐩稿弽錛屽畠浠叧娉ㄤ簬濉啓鎸夌収CMMI鏂囨。鎻忚堪鐨勫亣鎯崇殑緙洪櫡錛屽嵈涓嶅叧蹇冭繖浜涘彉鍖栨槸鍚﹁兘鏀硅繘榪囩▼鎴栦駭鍝併?/p> 鎵浠ユ晱鎹峰紑鍙戝湪榪囩▼涓彧緙栧啓澶熺敤鐨勬枃妗o紝鍜屼互“淇℃伅鐨勬矡閫氥佺鍚堟х殑璇佹嵁浠ュ強鐭ヨ瘑鍏變韓”浣滀負涓昏鐩爣鐨勮川閲忎綋緋繪枃妗h姹傚茍涓嶇煕鐩俱傚湪瀹炶返涓紝鎴戜滑鍙互鎸変互涓嬫柟娉曞仛錛屽湪瀹炵幇SCRUM鐨勫悓鏃訛紝絎﹀悎瀹℃牳鍜岃瘎浼扮殑瑕佹眰錛?/p> - 鍒朵綔鏍煎紡鑹ソ鐨勩佽緇嗗寲鐨勩佽淇濆瓨鐨勫拰鑳借窡韙殑Backlog銆傚鍗板拰鐓х墖鍚屾牱鏈夋晥銆?/p> - 灝嗙洃綆¢渶瑕佺殑鏂囨。宸ヤ綔涔熸斁鍏acklog銆傞櫎浜嗗彲浠ョ‘淇濆畠浠笉琚繕璁幫紝榪樿兘浣跨洃綆¤姹傜殑鎴愭湰鏄彲瑙佺殑銆?/p> - 浣跨敤媯鏌ュ垪琛紝浠ュ悜瀹℃牳鍛樻垨璇勪及鍛樿瘉鏄庢椿鍔ㄥ凡鎵ц銆傚洟闃熷“瀹屾垚”鐨勫畾涔?Definition of “Done”)鍙互寰堝鏄撹漿鍙樹負涓浠芥鏌ュ垪琛ㄣ?/p> - 浣跨敤鏁忔嵎欏圭洰綆$悊宸ュ叿銆傚畠鍏跺疄灝辨槸寮鍙戠▼搴忓拰璁板綍鐨勭數瀛愬憟鐜版柟寮忋?/p> 鎬昏岃█涔嬶紝杞歡鐮斿彂闇瑕佹枃妗o紙浣嗘枃妗g殑褰㈠紡鍙互鏄縐嶅鏍風殑錛岀敤Word鍐欑殑鏂囧瓧寮忕殑鏂囦歡鏄枃妗o紝鐢╒isio鐢葷殑UML鍥句篃鏄枃妗o紝淇濆瓨鍦≦uality Center涓殑嫻嬭瘯鐢ㄤ緥涔熸槸鏂囨。錛夛紝鍚屾椂鎴戜滑鍙渶鍐欏鐢ㄧ殑鏂囨。銆?/p> 6. 褰撴湁寮鍙戜漢鍛樺湪寮鍙戣繃紼嬩腑閬囧埌闅鵑錛屽伐浣滄棤娉曠戶緇紝鍥犺屾嫋寤惰繘搴︼紝鎬庝箞瑙e喅錛?/strong> 榪欎篃鏄釜甯擱亣鍒扮殑闂銆傚鏋滅鐞嗚呭浜庢煇涓伐紼嬪笀鐨勫叿浣撻棶棰樿繘琛屾寚瀵鹼紝灝變細闄峰叆榪囧害寰綆$悊鐨勫鍦般傛垜浠渶瑕佹壘鍒板畯瑙傝В鍐沖姙娉曘備竴錛屾垜浠熀浜嶴crum鐨?#8220;鍥㈤槦鏈夊叡鍚岀殑鐩爣”榪欎竴瑙勫垯錛屽埄鐢ㄥ墠闈㈡彁鍒扮殑闆嗕綋鎵鏈夋潈錛屽綋鍑虹幇榪欎簺闂鏃訛紝鐢ㄥ洟闃熶腑鎵鏈夊彲浠ヤ嬌鐢ㄧ殑鍔涢噺鏉ュ府鍔╁叾鎽嗚劚鍥板錛岃屼笉鏄換鍏朵粬浜鴻鎵嬫梺瑙傘傚綋鐒惰繖閲屼細鐗墊壇鍒扮嘩鏁堣瘎瀹氱殑闂錛屾瘮濡傦細鎻愪緵甯姪鐨勪漢浼氳寰楋紝浠栫殑甯姪鏃犲姪浜庤嚜宸辯嘩鏁堣瘎瀹氱殑鎻愰珮錛屼負浠涔堣鎻愪緵甯姪銆傝繖闇瑕佷漢鍔涜祫婧愰儴闂ㄥ湪浣跨敤Scrum寮鍙戠殑鍥㈤槦鐨勭嘩鏁堣瘎浼頒腑錛屽敖閲忔秷闄ら偅浜涘懼悜涓漢鐨勫洜绱狅紝榪樿鍖呭惈鍥㈤槦鍗忎綔鐨勫洜绱狅紝騫挎硾鍚彇涓柟闈㈢殑鎰忚錛屾洿棰戠箒鍦拌瘎浼扮嘩鏁堢瓑絳夈?/p> 浜岋紝鍗充嬌鍔ㄧ敤鎵鏈夊彲浠ヤ嬌鐢ㄧ殑鍔涢噺錛屽鏋滄煇涓毦棰樼湡鐨勬棤娉曢捐秺錛屼負浜嗗噺灝戜笉鑳芥寜鏃朵氦浠樼殑椋庨櫓錛屼駭鍝佽礋璐d漢搴斿綋绔欏嚭鏉ワ紝騫舵湁鎵浣滀負銆傝涔堥噸鏂拌瘎浼癇acklog鐨勪紭鍏堢駭錛屼嬌鏃犳硶緇х畫鐨凚acklog榪熶竴鐐逛氦浠橈紝鍏堝仛涓浜涚浉瀵硅緝浣庝紭鍏堢駭鐨凚acklog錛屼互淇濊瘉鏁翠綋浜や粯鏃墮棿涓嶈嚦浜庡歡闀匡紱瑕佷箞鍑忓皯閮ㄥ垎鍔熻兘錛岀粰鍑烘洿澶氱殑鏃墮棿鍘繪敾鍏嬮毦棰樸傛諱箣閫捐秺鎶鏈笂闅懼叧浼氫嬌鍥㈤槦鐨勭敓浜х巼涓嬮檷錛屼駭鍝佽礋璐d漢蹇呴』浣滃嚭鍙栬垗銆?/p> 7. 鏈変簺寮鍙戜漢鍛樻按騫崇浉瀵逛笉楂橈紝濡備綍淇濊瘉浠栦滑鐨勪唬鐮佽川閲忥紵 褰撶劧棣栧厛璁╄緝鏈夌粡楠岀殑浜篟eview鍏惰鎻愪氦鐨勪唬鐮侊紝榪欏嚑涔庢槸鎵鏈夌鐞嗚呬細鍋氱殑浜嬨傞櫎姝や箣澶栵紝綆$悊鑰呮湁璐d換甯姪榪欎簺浜猴紙涔熷寘鎷按騫寵緝楂樼殑浜猴級鎻愰珮姘村鉤錛屼粬浠彲浠ョ湅涓浜涗功錛屼笂緗戠湅璧勬枡錛岃鍒漢鐨勪唬鐮佺瓑絳夛紝閫旂粡榪樻槸寰堝鐨勩備絾闂鏄綘濡備綍鍘昏 閲忓叾鏄惁鐪熸鏈夋墍鏀惰幏銆傛垜浠殑緇忛獙鏄紝鍦ㄦ瘡騫村ぇ綰?鏈堜喚涓烘瘡涓伐紼嬪笀鍒跺畾鏁翠釜騫村害鐨勭洰鏍囷紝姣忎釜浜虹殑鐩爣鍖呮嫭浜у搧涓婄殑錛屾妧鏈笂鐨勶紝涓漢鑳藉姏涓婄殑絳?鍒?欏廣傚崐騫村悗鍜屼竴騫村悗錛岃鍋氫袱嬈erformance Review錛岀洰鏍囨槸鍚﹀疄鐜幫紝涔熶細璺熺嘩鏁堣瘎瀹氭寕閽┿傛垜浠湪鍒跺畾鐩爣鏃訛紝閬靛驚SMART鍘熷垯錛屽嵆錛?/p> Specific錛堟槑紜殑錛夛細鐩爣搴旇鎸夌収鏄庣‘鐨勭粨鏋滃拰鎴愭晥琛ㄨ堪銆?/p> Measurable錛堝彲琛¢噺鐨勶級錛氱洰鏍囩殑瀹屾垚鎯呭喌搴旇鍙互琛¢噺鍜岄獙璇併?/p> Aligned錛堢粨鐩熺殑錛夛細鐩爣搴旇涓庡叕鍙哥殑鍟嗕笟絳栫暐淇濇寔涓鑷淬?/p> Realistic錛堢幇瀹炵殑錛夛細鐩爣铏界劧搴斿叿鎸戞垬鎬э紝浣嗘洿搴旇鑳藉湪緇欏畾鐨勬潯浠跺拰鐜涓嬪疄鐜般?/p> Time-Bound錛堟湁鏃墮檺鐨勶級錛氱洰鏍囧簲璇ュ寘鎷竴涓疄鐜扮殑鍏蜂綋鏃墮棿銆?/p> 姣斿錛氭煇涓漢鍒跺畾浜?#8220;鍒濇鎺屾彙鏈湴鍖栨妧鏈?#8221;鐨勭洰鏍囷紝浠栬紜畾瀹炵幇鏃墮棿錛岃鎻忚堪瀛︿範鐨勯旂粡鍜屾楠わ紝瑕侀氳繃灝嗘妧鏈柦鍔犲埌鍏徃鐜版湁鐨勪駭鍝佷腑錛屼負鍏徃浜у搧鐨勬湰鍦板寲/鍥介檯鍖?鍏ㄧ悆鍖栦綔涓浜涙帰绱紝騫跺埗浣淧resentation緇欏洟闃熸紨紺轟粬鐨勬垚鏋滐紝騫跺噯澶囧洖絳斿叾浠栦漢鎻愬嚭鐨勯棶棰樸傚洟闃熻繕涓轟簡閰嶅悎鍏跺疄鐜扮洰鏍囷紝緇勭粐Tech Talk鐨勬椿鍔紝渚涘ぇ瀹跺垎浜瘡涓漢鐨勫涔犳垚鏋溿傞氳繃榪欎簺鎵嬫錛屾彁楂樺紑鍙戜漢鍛樼殑鑷鍏磋叮錛屽茍閫愭鎻愰珮寮鍙戜漢鍛樼殑鎶鏈按騫熾?/p> 8. 濡備綍鎻愰珮寮鍙戜漢鍛樼殑涓昏鑳藉姩鎬э紵 鎻愰珮寮鍙戜漢鍛樼殑涓昏鑳藉姩鎬э紝灝戜笉浜嗘縺鍔辨満鍒躲備笉鑳借寮鍙戜漢鍛樻劅鍒幫紝5騫翠互鍚庣殑浠栧拰鐜板湪姣斾笉浼氭湁浠涔堣繘姝ャ備綘瑕佽浠栨劅鍒頒粬鎵浠庝簨鐨勬槸涓涓亴涓氾紙Career錛夛紝鑰屼笉鍙槸涓浠藉伐浣滐紙Job錛夈傚惁鍒欙紝浠栦滑鏄笉浼氫富鍔ㄦ姇鍏ュ埌宸ヤ綔涓殑銆傛垜浠殑緇忛獙鏄彁渚涗竴濂楄亴涓氬彂灞曠殑妗嗘灦銆傛鏋跺埗瀹氫簡2綾誨彂灞曢亾璺紝綆$悊綾伙紙Managerial Path錛夊拰鎶鏈被錛圱echnical Path錛夛紝6涓亴涓氱駭鍒紙1-3綰ф槸Entry/Associate錛孖ntermediate錛孲enior銆?綰х鐞嗙被鏄疢anager/Senior Manager錛屾妧鏈被鏄疨rincipal/Senior Principal銆?綰х鐞嗙被鏄疍irector/Senior Director錛屾妧鏈被鏄疐ellow/Architect銆?綰ф槸Executive Management錛夈傛瘡涓駭鍒兘鏈?3涓柟闈㈢殑鍏蜂綋瑕佹眰錛屽寘鎷細鑼冨洿錛圫cope錛夈佽法鑱岃兘錛圕ross Functional錛夈佸眰嬈★紙Level錛夈佺煡璇嗭紙Knowledge錛夈佹寚瀵鹼紙Guidance錛夈侀棶棰樿В鍐籌紙Problem Solving錛夈侀掍氦鎴愭灉錛圖elivering Result錛夈佽矗浠繪劅錛圧esponsbility錛夈佸甯堬紙Mentoring錛夈佷氦嫻侊紙Communication錛夈佽嚜瀛︼紙Self-Learning錛夛紝榪愪綔鐩戠潱錛圤perational Oversight錛夛紝瀹㈡埛鍝嶅簲錛圕ustomer Responsiveness錛夈傛瘡騫存湁2嬈℃彁楂樼駭鍒殑鏈轟細錛屽紑鍙戜漢鍛樹竴鏃﹀叿澶囦簡鍗囩駭鐨勬潯浠訛紝浠栫殑Supervisor灝嗕細鎻愬嚭鐢寵錛屼竴鏃︽壒鍑嗭紝浠栫殑澶磋闅忎箣鎻愰珮錛岃柂姘翠篃浼氭湁鐩稿杈冨ぇ鎻愰珮銆備粠鑰屼嬌姣忎釜寮鍙戜漢鍛樿寰?#8220;鏈夊澶?#8221;錛岃嚜鐒朵粬浠殑涓昏鑳藉姩鎬т篃灝辨彁楂樹簡銆?/p> 涓婇潰鐨?#8220;濂楄礬”娑夊強浜嗚蔣浠剁爺鍙戝洟闃熺鐞嗕腑鐨勭爺鍙戣繃紼嬨佹妧鏈疄璺點佹枃妗g鐞嗐佹縺鍔辨満鍒剁瓑涓浜涙柟闈€備絾鍙槸涔濈墰涓姣涳紝鐮斿彂鍥㈤槦綆$悊娑電洊鐨勫唴瀹硅繕鏈夊緢澶氬緢澶氾紝榪橀渶瑕佺鐞嗚呭湪涓嶆柇鎺㈢儲鍜屽疄璺電殑閬撹礬涓婂涔犲拰鎺屾彙銆?/p>
鍏跺疄鏈鍏抽敭灝辨槸闄ゅ紑涓嶅繀瑕佺殑鏂囦歡錛屽疄闄呬笂錛?br style="padding: 0px; margin: 0px;" />緙栬瘧 lua錛坙ua.exe錛岃В鏋愬櫒錛?鏃跺垹闄uac.c錛屽姞鍏ua.c銆?br style="padding: 0px; margin: 0px;" />緙栬瘧 luac錛坙uac.exe錛屽瓧鑺傜爜緙栬瘧鍣級鏃跺垹闄ua.c錛屽姞鍏uac.c銆?br style="padding: 0px; margin: 0px;" />緙栬瘧 lib鍜宒ll錛坙iblua.a鍜宭ua.dll錛屽簱錛夋椂鎶妉ua.c鍜宭uac.c閮藉垹闄ゃ?/p>
杞嚜錛?a >http://my.oschina.net/u/580100/blog/108468
]]>
SERVICE_STATUS gSvcStatus; //鏈嶅姟鐘舵?/span>
SERVICE_STATUS_HANDLE gSvcStatusHandle; //鏈嶅姟鐘舵佸彞鏌?/span>
HANDLE ghSvcStopEvent = NULL;//鏈嶅姟鍋滄鍙ユ焺
#define SERVER_NAME TEXT("my_server") //鏈嶅姟鍚?/span>
VOID WINAPI Server_main( DWORD, LPTSTR *); //鏈嶅姟鍏ュ彛鐐?/span>
void ServerReportEvent(LPTSTR szName,LPTSTR szFunction); //鍐橶indows鏃ュ織
VOID ReportSvcStatus( DWORD, DWORD, DWORD ); //鏈嶅姟鐘舵佸拰SCM浜や簰
VOID WINAPI SvcCtrlHandler( DWORD ); //SCM鍥炶皟鍑芥暟
VOID ServerProgram(DWORD, LPTSTR *); //鏈嶅姟涓葷▼搴?/span>
void main()
{
SERVICE_TABLE_ENTRY DispatchTable[] =
{
{ SERVER_NAME, (LPSERVICE_MAIN_FUNCTION)Server_main },
{ NULL, NULL }
};
if (!StartServiceCtrlDispatcher(DispatchTable))
{
ServerReportEvent(SERVER_NAME,TEXT("StartServiceCtrlDispatcher"));
}
}
static VOID WINAPI Server_main(DWORD dwArgc, LPTSTR *lpszArgv )
{
// Register the handler function for the service
gSvcStatusHandle = RegisterServiceCtrlHandler(
SERVER_NAME,
SvcCtrlHandler);
if( !gSvcStatusHandle )
{
ServerReportEvent(SERVER_NAME,TEXT("RegisterServiceCtrlHandler"));
return;
}
// These SERVICE_STATUS members remain as set here
gSvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; //鍙湁涓涓崟鐙殑鏈嶅姟
gSvcStatus.dwServiceSpecificExitCode = 0;
// Report initial status to the SCM
ReportSvcStatus( SERVICE_START_PENDING, NO_ERROR, 3000 );
// Perform service-specific initialization and work.
ghSvcStopEvent = CreateEvent(
NULL, // default security attributes
TRUE, // manual reset event
FALSE, // not signaled
NULL); // no name
if ( ghSvcStopEvent == NULL)
{
ReportSvcStatus( SERVICE_STOPPED, NO_ERROR, 0 );
return;
}
// Report running status when initialization is complete.
ReportSvcStatus( SERVICE_RUNNING, NO_ERROR, 0 );
// TO_DO: Perform work until service stops.
ServerProgram(dwArgc, lpszArgv); //浣犻渶瑕佺殑鎿嶄綔鍦ㄦ娣誨姞浠g爜
while(1)
{
// Check whether to stop the service.
WaitForSingleObject(ghSvcStopEvent, INFINITE);
ReportSvcStatus( SERVICE_STOPPED, NO_ERROR, 0 );
return;
}
}
void ServerReportEvent(LPTSTR szName,LPTSTR szFunction)
{
HANDLE hEventSource;
LPCTSTR lpszStrings[2];
unsigned int len = sizeof(szFunction);
TCHAR *Buffer = new TCHAR[len];
hEventSource = RegisterEventSource(NULL, szName);
if( NULL != hEventSource )
{
//StringCchPrintf(Buffer, 80, TEXT("%s failed with %d"), szFunction, GetLastError());
strcpy(Buffer,szFunction);
lpszStrings[0] = szName;
lpszStrings[1] = Buffer;
ReportEvent(hEventSource, // event log handle
EVENTLOG_ERROR_TYPE, // event type
0, // event category
SVC_ERROR, // event identifier
NULL, // no security identifier
2, // size of lpszStrings array
0, // no binary data
lpszStrings, // array of strings
NULL); // no binary data
DeregisterEventSource(hEventSource);
}
}
VOID ReportSvcStatus( DWORD dwCurrentState,
DWORD dwWin32ExitCode,
DWORD dwWaitHint)
{
static DWORD dwCheckPoint = 1;
// Fill in the SERVICE_STATUS structure.
gSvcStatus.dwCurrentState = dwCurrentState;
gSvcStatus.dwWin32ExitCode = dwWin32ExitCode;
gSvcStatus.dwWaitHint = dwWaitHint;
if (dwCurrentState == SERVICE_START_PENDING)
gSvcStatus.dwControlsAccepted = 0;
else gSvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
if ( (dwCurrentState == SERVICE_RUNNING) ||
(dwCurrentState == SERVICE_STOPPED) )
gSvcStatus.dwCheckPoint = 0;
else gSvcStatus.dwCheckPoint = dwCheckPoint++;
// Report the status of the service to the SCM.
SetServiceStatus( gSvcStatusHandle, &gSvcStatus );
}
VOID WINAPI SvcCtrlHandler( DWORD dwCtrl )
{
// Handle the requested control code.
switch(dwCtrl)
{
case SERVICE_CONTROL_STOP:
ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
// Signal the service to stop.
SetEvent(ghSvcStopEvent);
return;
case SERVICE_CONTROL_INTERROGATE:
// Fall through to send current status.
break;
default:
break;
}
ReportSvcStatus(gSvcStatus.dwCurrentState, NO_ERROR, 0);
}
]]>
vector鐨刾ush_back鎿嶄綔 鍙兘娌′簨錛屼絾鏄竴鏃﹀紩鍙戝唴瀛橀噸鍒嗛厤錛屾墍鏈夎凱浠e櫒閮戒細澶辨晥錛?br />vector鐨刬nsert鎿嶄綔 鎻掑叆鐐逛箣鍚庣殑鎵鏈夎凱浠e櫒澶辨晥錛涗絾涓鏃﹀紩鍙戝唴瀛橀噸鍒嗛厤錛屾墍鏈夎凱浠e櫒閮戒細澶辨晥錛?br />vector鐨別rase鎿嶄綔 鎻掑叆鐐逛箣鍚庣殑鎵鏈夎凱浠e櫒澶辨晥錛?br />vector鐨剅eserve鎿嶄綔 鎵鏈夎凱浠e櫒澶辨晥錛堝洜涓哄畠瀵艱嚧鍐呭瓨閲嶅垎閰嶏級錛?br />
list/map: 鎻掑叆涓嶄細浣垮緱浠諱綍榪唬鍣ㄥけ鏁堬紱鍒犻櫎榪愮畻浣挎寚鍚戝垹闄や綅緗殑榪唬鍣ㄥけ鏁堬紝浣嗘槸涓嶄細澶辨晥鍏朵粬榪唬鍣?
deque鐨刬nsert鎿嶄綔 鎵鏈夎凱浠e櫒澶辨晥錛?br />deque鐨別rase鎿嶄綔 鎵鏈夎凱浠e櫒澶辨晥錛?br />
1. 瀵逛簬鍏寵仈瀹瑰櫒(濡俶ap, set, multimap,multiset)錛?/span>鍒犻櫎褰撳墠鐨刬terator錛屼粎浠呬細浣垮綋鍓嶇殑iterator澶辨晥錛屽彧瑕佸湪erase鏃訛紝閫掑褰撳墠iterator鍗沖彲銆傝繖鏄洜涓簃ap涔嬬被鐨勫鍣紝浣跨敤浜嗙孩榛戞爲鏉ュ疄鐜幫紝鎻掑叆銆佸垹闄や竴涓粨鐐逛笉浼氬鍏朵粬緇撶偣閫犳垚褰卞搷銆俥rase榪唬鍣ㄥ彧鏄鍒犲厓绱犵殑榪唬鍣ㄥけ鏁堬紝浣嗘槸榪斿洖鍊間負void錛屾墍浠ヨ閲囩敤erase(iter++)鐨勬柟寮忓垹闄よ凱浠e櫒銆?br />for (iter = cont.begin(); it != cont.end();)
{
(*iter)->doSomething();
if (shouldDelete(*iter))
cont.erase(iter++);
else
++iter;
}
2. 瀵逛簬搴忓垪寮忓鍣?濡倂ector,deque)錛屽垹闄ゅ綋鍓嶇殑iterator浼氫嬌鍚庨潰鎵鏈夊厓绱犵殑iterator閮藉け鏁堛傝繖鏄洜涓簐etor,deque浣跨敤浜嗚繛緇垎閰嶇殑鍐呭瓨錛屽垹闄や竴涓厓绱犲鑷村悗闈㈡墍鏈夌殑鍏冪礌浼氬悜鍓嶇Щ鍔ㄤ竴涓綅緗傛墍浠ヤ笉鑳戒嬌鐢╡rase(iter++)鐨勬柟寮忥紝榪樺ソerase鏂規硶鍙互榪斿洖涓嬩竴涓湁鏁堢殑iterator銆?br />for (iter = cont.begin(); iter != cont.end();)
{
(*it)->doSomething();
if (shouldDelete(*iter))
iter = cont.erase(iter);
else
++iter;
}
3. 瀵逛簬list鏉ヨ錛屽畠浣跨敤浜嗕笉榪炵畫鍒嗛厤鐨勫唴瀛橈紝騫朵笖瀹冪殑erase鏂規硶涔熶細榪斿洖涓嬩竴涓湁鏁堢殑iterator錛屽洜姝?span style="color: #ff0000;">涓婇潰涓ょ鏂規硶閮藉彲浠ヤ嬌鐢ㄣ?/span>
鍒犻櫎鏁扮粍涓煇涓厓绱犲悗榪炵畫閲嶅鐨勫厓绱狅紝渚嬪 1錛?錛?錛?錛?錛?錛?錛?錛?錛? ---> 1錛?2錛?錛?錛?錛?銆傜粰鍑洪棶棰樼殑涓涓紜殑瀹炵幇錛?br />
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
int a[] = {1, 1, 3, 3, 3, 2, 4, 1, 1, 1, 0};
int size = sizeof(a)/sizeof(a[0]);
vector<int> vec(a, a+size);
vector<int>::iterator iter = vec.begin();
int previous = *iter;
++iter;
for (; iter != vec.end();)
{
if(*iter == previous)
{
iter = vec.erase(iter);
}
else
{
previous = *iter;
++iter;
}
}
for(iter = vec.begin(); iter != vec.end(); ++iter)
{
cout << *iter << endl;
}
return 0;
}
杞嚜錛?a >http://blog.csdn.net/heyutao007/article/details/6937236
]]>
]]>