锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 瀹炴椂鎿嶄綔緋葷粺鐨勪竴涓壒鐐瑰氨鏄紝涓涓疄鏃朵換鍔★紝浼氬湪瑙勫畾鐨勬椂闂村唴寰楀埌鍝嶅簲錛屽茍涓斿湪瑙勫畾鐨勬椂闂村唴瀹屾垚浠誨姟銆傛墍浠ワ紝涓鍒囦笉鍙鐭ョ殑鍔ㄤ綔閮芥槸鏈夊鐨勩?/p> 鏈夊叴瓚e彲浠ョ湅鐪嬩笅闈袱涓摼鎺ワ細 Jump to: navigation, search In scheduling, priority inversion is the scenario where a low priority task holds a shared resource that is required by a high priority task. This causes the execution of the high priority task to be blocked until the low priority task has released the resource, effectively "inverting" the relative priorities of the two tasks. If some other medium priority task, one that does not depend on the shared resource, attempts to run in the interim, it will take precedence over both the low priority task and the high priority task. In some cases, priority inversion can occur without causing immediate harm鈥攖he delayed execution of the high priority task goes unnoticed, and eventually the low priority task releases the shared resource. However, there are also many situations in which priority inversion can cause serious problems. If the high priority task is left starved of the resources, it might lead to a system malfunction or the triggering of pre-defined corrective measures, such as a watch dog timer resetting the entire system. The trouble experienced by the Mars lander "Mars Pathfinder"[1][2] is a classic example of problems caused by priority inversion in realtime systems. Priority inversion can also reduce the perceived performance of the system. Low priority tasks usually have a low priority because it is not important for them to finish promptly (for example, they might be a batch job or another non-interactive activity). Similarly, a high priority task has a high priority because it is more likely to be subject to strict time constraints鈥攊t may be providing data to an interactive user, or acting subject to realtime response guarantees. Because priority inversion results in the execution of the low priority task blocking the high priority task, it can lead to reduced system responsiveness, or even the violation of response time guarantees. A similar problem called deadline interchange can occur within Earliest Deadline First Scheduling (EDF). The existence of this problem has been known since the 1970s, but there is no fool-proof method to predict the situation. There are however many existing solutions, of which the most common ones are: .鎿嶄綔緋葷粺瑕佹眰錛?br> - Windows 2000, 2003,鎴朮P (鍏跺疄Vista涓嬫垜璇曡繃涔熷彲浠? .鍏朵粬杞歡瑕佹眰錛?br> - WinZIP鎴栫被浼肩殑瑙e帇緙╁伐鍏?br> - ActiveState Perl v5.6.1鎴栨洿鏂扮増鏈紙鎺ㄨ崘錛屼笉鏄繀闇錛?/p>
鑾峰彇鍜屽畨瑁匒CE+TAO 濡傛灉涓婅堪鐨剋orkspace鏂囦歡涓嶅瓨鍦紝閭d箞浣犻渶瑕佺敤MakeProjectCreator (MPC)鏉ョ敓鎴愬畠銆?br> 鍛戒護琛屽涓嬶紙闇瑕丳erl錛屼笂闈㈠凡鍒楀嚭錛夛細 闂錛氱敱浜巐og4cpp-0.3.5rc3浠呮彁渚涗簡vc6鐨勫伐紼嬫枃浠訛紝鍥犳錛屼嬌鐢╲s2005鎵撳紑鍚庯紝闇瑕佽繘琛岃漿鎹€備絾鏄漿鎹㈠悗錛屼笉鑳芥紜紪璇戯紝鎻愮ずCustom Build Step鏃跺嚭鐜頒簡閿欒銆?/p>
鍒嗘瀽錛氬洜涓簂og4cpp鍦ㄧ敓鎴怤TEventLogAppender.dll鏃訛紝闇瑕佽繛鎺TEventLogCategories.mc鏂囦歡銆傛墍浠ワ紝欏圭洰璁劇疆浜嗚嚜瀹氫箟鐨勭敓鎴愭楠ゅ幓鐢熸垚NTEventLogAppender.dll銆備絾浠巚c6鐨勫伐紼嬫枃浠惰漿鎹㈡椂錛岃繖浜涙楠ゅ嵈娌℃湁姝g‘鐨勮漿鎹㈣繃鏉ャ備粠鑰屽嚭鐜頒笂榪伴棶棰樸?/p>
瑙e喅鏂規硶錛氶噸鏂板~鍐機ustom Build Step欏廣?/p>
鍏朵腑錛孋ommandLine濉啓浠ヤ笅鍐呭錛?/p>
if not exist $(OutDir) md $(OutDir) Outputs濉啓錛?(OutDir)\NTEventLogAppender.dll 閫傜敤鑼冨洿錛歭og4cpp欏圭洰銆乴og4cppDLL欏圭洰鐨凞ebug鍜孯elease閰嶇疆銆傚悓鏃訛紝璇ユ柟娉曢傜敤浜巚s2003(vc7.1)銆?/p>
ACE/TAO鐨勫疄鐜拌璦鏄疌鍜孋++銆傜敤ACE/TAO鏋勫緩鏈嶅姟鍣ㄥ拰瀹㈡埛绔殑榪囩▼瓚呭嚭浜嗘湰鎸囧崡鐨勮寖鍥達紝浣嗘湁鍑犱釜姒傚康榪樻槸鍊煎緱閲嶆彁錛?br />1. 鎺ュ彛(Interface)瀹氫箟鍦∣MG聽鏍囧噯鐨?idl鏂囦歡涓傜敤TAO_IDL瀹炵敤紼嬪簭,TAO鍙互鑷姩閫氳繃.idl鏂囦歡鐢熸垚C++鐨勯潤鎬佸瓨鏍?stubs)鍜屾鏋?skeletions),浜岃呭垎鍒敤浜庢湇鍔″櫒绔拰瀹㈡埛绔?
榪欎釜闂鍦ㄤ竴鑸殑鎿嶄綔緋葷粺閲岄潰涓嶆槸涓涓弗閲嶇殑闂錛屾渶澶欰琚闃誨浜嗕竴孌墊椂闂淬備絾鏄紝鍦ㄥ疄鏃剁郴緇熼噷闈紝濡傛灉涓涓換鍔″湪瑙勫畾鐨勬椂闂撮噷闈㈡病鏈夎璋冨害榪愯錛岀郴緇熷氨鐩稿綋浜庡け璐ヤ簡錛屽彲鑳藉紩鍙戠郴緇熷穿婧冦?
瑙e喅榪欎釜闂鏈変袱縐嶆墜孌碉細
1錛歅riority inheritance(浼樺厛綰х戶鎵?錛屽鏋滀竴涓珮浼樺厛綰х殑task琚樆濉烇紝涓庡畠鍏變韓涓寸晫鍖虹殑浣庝紭鍏堢駭鐨則ask鍦ㄨ繘鍏ヤ復鐣屽尯鍚庯紝浼樺厛綰у氨浼氱戶鎵塊珮浼樺厛綰ask鐨勪紭鍏堢駭錛屼繚璇佸畠涓嶄細琚叾浠栦紭鍏堢駭嬈¢珮鐨勪換鍔℃墦鏂備粠涓寸晫鍖洪鍑哄悗錛孋鐨勪紭鍏堢駭鎭㈠姝e父銆?
2錛欰 priority ceiling錛堟渶楂樹紭鍏堢駭錛夛紝緇欎復鐣屽尯鍒嗛厤鏈楂樹紭鍏堢駭錛屽鏋滀竴涓猼ask榪涘叆涓寸晫鍖猴紝灝辨妸涓寸晫鍖虹殑浼樺厛綰ц祴緇欏畠錛屽凡淇濊瘉瀹冧笉浼氳鎵撴柇銆備粠涓寸晫鍖洪鍑哄悗錛宼ask鐨勪紭鍏堢駭鎭㈠姝e父銆?/p>
http://en.wikipedia.org/wiki/Priority_inversionPriority inversion
From Wikipedia, the free encyclopedia
Contents
[hide] [edit] Solutions
[edit] See also
[edit] Notes
[edit] References
[edit] External links
A:鏈現AQ鎻愪緵 鍦╓indows涓嬬敤VisualC++瀹夎鍜屾瀯寤篈CE+TAO鐨勫熀鏈鏄庛?br> ACE+TAO涔熼傜敤浜庡叾瀹冧富瑕佺殑鎿嶄綔緋葷粺錛屼緥濡傦細Linux, Solaris,
HP-UX, AIX鍜孴ru64,榪橀傜敤浜庝竴浜涘疄鏃訛紝宓屽叆寮忔搷浣滅郴緇燂紝濡?br> VxWorks,LynxOS, timeSys Linux鍜學indows CE銆傚湪Windows涓紝
ACE+TAO涔熷彲浠ョ敤Borland C++緙栬瘧鍣ㄦ瀯寤恒?/p>
.紜歡瑕佹眰錛?br> - CPU錛?Intel X86 P3 500 MHz鎴栨洿蹇?br> - 鍐呭瓨錛?12MB (鏇村鍐呭瓨鍙互鎻愰珮緙栬瘧閫熷害)
- 紜洏絀洪棿錛?256MB浜や簰絀洪棿+ 250MB鑷蟲暟GB絀洪棽絀洪棿錛堝彇鐦婁簬鎮ㄨ鏈?br> 澶氬皯闇瑕佹瀯寤?
.C++緙栬瘧鍣ㄨ姹傦細
- Microsoft Visual C++ 6.0 SP5 (鏂扮増鏈殑ACE+TAO宸蹭笉鏀寔VC6浜?
- Microsoft Visual C++ 7.1 (VS2003)
- Microsoft Visual C++ 8.0 (VS2005)
- Microsoft Visaul C++ 9.0 (VS2008)
1. 浠庝笅杞絆CI TAO 1.5a鐨勬渶鏂拌ˉ涓?br> http://download.ociweb.com/TAO-1.5a/ACE+TAO-1.5a_with_latest_patches.zip
鎴栦粠ACE+TAO鐨勫畼鏂圭綉绔欎笂涓嬭澆鏈鏂癇eta鐗?br> http://download.dre.vanderbilt.edu/
2. 鎶婁笂榪板帇緙╂枃浠墮噴鍏ヨ嚦娌℃湁絀烘牸鐨勭洰褰曚腑錛堜緥濡傦細C:\ACE_wrappers)
3. 璁劇疆鐜鍙橀噺 ACE_ROOT,TAO_ROOT鍜孭ATH.
渚嬪錛氬鏋淎CE+TAO瀹夎鑷矯:\ACE_wrappers,鍒欎笂榪扮幆澧冨彉閲忓涓嬶細
* ACE_ROOT=C:\ACE_wrappers
* TAO_ROOT=%ACE_ROOT%\TAO
* PATH璺緞闇瑕佸寘鍚? %ACE_ROOT%\bin;%ACE_ROOT%\lib
4. 鍦?%ACE_ROOT%\ace 鐩綍涓璫onfig.h鏂囦歡錛屾枃浠跺唴瀹規槸錛?br> #define ACE_DISABLE_WIN32_ERROR_WINDOWS
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
#define ACE_DISABLE_WIN32_INCREASE_PRIORITY
#include "ACE/config-win32.h"
5. %TAO_ROOT%\TAOACE.sln
鍦ˋCETAO宸ヤ綔鍖?workspace)涓殑欏圭洰鏋勫緩ACE鍜孴AO搴擄紝TAO_IDL緙栬瘧鍣ㄣ乬perf,
ORB鏈嶅姟搴撳拰鍙墽琛屾枃浠朵互鍙婁竴浜涘叕鍏辯殑瀹炵敤宸ュ叿(utilities)銆備粬浠笉鍖呭惈
紺轟緥銆佹祴璇曞拰鎬ц兘嫻嬭瘯銆傚簱鏂囦歡灝嗗畨瑁呰嚦%ACE_ROOT%\lib錛屼竴浜涘彲鎵ц鏂囦歡灝嗗畨瑁?br> 鑷?ACE_ROOT%\bin涓紝鍏朵粬錛圤RB鏈嶅姟鐨勫彲鎵ц鏂囦歡錛夊皢瀹夎鍦ㄤ粬浠嚜宸辯殑婧愪唬鐮佹墍鍦?br> 鐩綍涓?br>
濡傛灉鎮ㄤ笉鎯沖叏閮ㄥ緩璁甌AOACE workspace鐨勫簱鍜屽彲鎵ц鏂囦歡錛屾垜浠緩璁瀯寤篘aming_Service
欏圭洰銆傚湪寮鍙戣嚜宸辯殑搴旂敤紼嬪簭閲屽父浼氱敤鍒板畠銆?/p>
cd %TAO_ROOT%
%ACE_ROOT%\bin\mwc.pl -type vc71 TAOACE.mwc -- 鎴愮敓visual stuido 2003 workspace鏂囦歡
%ACE_ROOT%\bin\mwc.pl -type vc8 TAOACE.mwc -- 鎴愮敓visual stuido 2005 workspace鏂囦歡
%ACE_ROOT%\bin\mwc.pl -type vc9 TAOACE.mwc -- 鎴愮敓visual stuido 2008 workspace鏂囦歡
浣跨敤vs2005(vc8)緙栬瘧log4cpp-0.3.5rc3
"mc.exe" -h $(OutDir) -r $(OutDir) $(SolutionDir)NTEventLogCategories.mc
"RC.exe" -r -fo $(OutDir)\$(InputName).res $(ProjectDir)\$(InputName).rc
"link.exe" /MACHINE:IX86 -dll -noentry -out:$(OutDir)\NTEventLogAppender.dll $(OutDir)\$(InputName).res
2.瀵硅薄璇鋒眰鐨勫璺垎鍙戯紱
3.鍒嗗撫鍙婇敊璇鐞嗭紱
4.鍙傛暟緙栫爜鍜岃В鐮侊紱鍜?br />5.鎿嶄綔鐨勫璺垎瑙?/p>
2.紼嬪簭鍛樺疄鐜板湪鐢熸垚鐨処.cpp闈欐佸瓨鏍逛腑鐨勬帴鍙o紝鍐嶄嬌鐢ㄦ儻鐢ㄧ殑CORBA鎶鏈潵緙栧啓瀹㈡埛绔拰鏈嶅姟绔殑浠g爜鏉ヨ繘琛屽疄鐜般?br />3. ACE/TAO鎻愪緵浜嗕竴涓猰ake瀹炵敤紼嬪簭錛岃繖涓疄鐢ㄧ▼搴忓彲浠ヨ法騫沖彴鐨勭鐞嗛」鐩殑鍒涘緩鍜岀紪璇戙傜▼搴忓憳緙栧啓鐨?mpc鏂囦歡錛屽畾涔変簡鎵鍒涘緩鐨勯」鐩墍闇鐨勬簮浠g爜錛孭erl璇█鑴氭湰鍒涘緩makefile鏂囦歡鎴朧isual Sutdio鐨勮В鍐蟲柟妗堛傚湪Linux涓婏紝鍙互鐢熸垚GC++欏圭洰錛屽懡浠ゆ槸 mwc.pl -type gcace銆傚湪Windows涓婏紝浜х敓Visual studio.net 2003瑙e喅鏂規鐨勫懡浠ゆ槸:mwc.pl -type VC71
ACE_Acceptor妗嗘灦浣垮鏂拌繛鎺ョ殑渚﹀惉鍙樺緱瀹規槗錛屼篃浣垮垱寤哄拰嬋媧繪柊榪炴帴鐨凙CE_Svc_Handler鐨勬淳鐢熺被鍙樺緱瀹規槗銆備箣鍓嶆垜浠凡緇忎簡瑙d簡ACE_Svc_Handle::open()鎸傚嬀鍑芥暟鍜屾湇鍔″鐞嗗櫒
鍒濆鍖栨椂瀹冩墍鎵紨鐨勮鑹層傛湰鏂囨垜浠洖閫鍑犳錛屾潵浜嗚В鏈嶅姟澶勭悊鍣ㄦ槸濡備綍瀹炰緥鍖栫殑浠ュ強鎴戜滑濡備綍鑷畾涔夊畠鐨勮涓恒?/p>
鍐嶇湅鐪婣CE_Acceptor綾伙紝瀹冩槸涓涓ā鏉跨被錛岀涓涓ā鏉垮弬鏁癆CE_Accetpor鏄唬琛ㄤ笌鏈嶅姟寤虹珛榪炴帴鐨勫鐞嗗櫒銆傚綋鏂扮殑榪炴帴寤虹珛鏃訛紝ACE_Acceptor璋冪敤make_svc_handler()鎸傚嬀鍑芥暟鏉?/p>
瀹為檯鍒涘緩鐨勬柊寤烘湇鍔″鐞嗗櫒瀵硅薄銆侫CE_Acceptor::make_svc_handler()鐨勫疄鐜板涓?
聽
榛樿鐨勫疄鐜板寘鎷簡涓ゆ鍩烘湰鎿嶄綔錛?br />1.聽 鑾峰緱涓涓柊鐨凷VC_HANLDER瀵硅薄錛?榪欓噷鏄嬌鐢ㄧ殑new榪愮畻絎﹀垎閰嶇殑銆?br />2.聽 璁劇疆鏂扮殑鏈嶅姟澶勭悊鍣ㄧ殑reactor鎸囬拡涓篈CE_Accetpor浣跨敤鐨剅eactor鐨勩?/p>
鐒惰岋紝濡傛灉搴旂敤紼嬪簭闇瑕侀氳繃鍏跺畠鏂瑰紡鑾峰緱SVC_HANDLER瀵硅薄錛岃屼笉鏄氳繃榛樿鐨勬瀯閫犲嚱鏁伴偅縐嶅姩鎬佸垎閰嶏紝榪欏張璇ユ庝箞鍔炲憿錛熶婦渚嬫潵璇達紝鎴戜滑鍙兘闇瑕侊細
聽. 浠庝竴涓鍒嗛厤鐨勬睜涓幏寰桽VC_HANDLER瀵硅薄錛?br />聽. 涓烘柊鍒涘緩鐨凷VC_HANDLER浼犲叆涓浜涢澶栫殑淇℃伅
聽. 浣跨敤鍗曚綋鐨凷VC_HANDLER
涓婇潰榪欎簺鎯呭艦錛屾垜浠兘鍙互鑷畾涔塵ake_svc_handler()鎸傚嬀鍑芥暟鏉ュ疄鐜板繀瑕佺殑琛屼負銆備緥濡?鍋囧畾鎴戜滑鏂扮殑澶勭悊鍣ㄩ渶瑕佹嫢鏈変竴涓鐞嗘墍鏈夊鎵鏈夋帴鏀跺埌鐨勬秷鎭繘琛岄泦涓鐞嗙殑涓績澶勭悊
鍣ㄣ傝繖涓腑蹇冨鐞嗗櫒鎴戜滑鐢ㄧ被Processor琛ㄧず銆傛垜浠渶瑕佹瘡涓湇鍔″鐞嗗櫒閮芥嫢鏈変竴涓寚鍚戜腑蹇冨鐞嗗櫒鐨勬寚閽堬紝鑰屼笉鏄嬌Processor鎴愪負涓涓叏灞璁塊棶鐨勬寚閽?浣跨敤鍏ㄥ眬鍙橀噺鐨勭縐嶅紛绔?/p>
鏈枃涓嶄綔璇﹁堪)銆傛垜浠殑瑙e喅鍔炴硶鏄? 浠嶢CE_Accetor媧劇敓涓涓柊綾伙紝榪欎釜鏂扮被鎷ユ湁Processor鐨勬寚閽堜綔鎴愬憳錛屽茍涓旓紝鍦ㄥ垱寤烘柊鍜屾湇鍔″鐞嗗櫒(Service)鐨勬椂鍊欙紝鎶婅繖涓?Processor鐨?/p>
鎸囬拡浣滃弬鏁頒紶榪涘幓銆?/p>
鏂扮殑acceptor綾誨彲浠ヨ繖鏍峰畾涔夛細
聽
灝辮繖鏍鳳紝鐜板湪錛屽綋My_Acceptor鎺ュ彈鏂拌繛鎺ョ殑鏃跺欙紝make_svc_handler()鎸傚嬀鍑芥暟鍒嗛厤涓涓柊鐨勫鐞嗗櫒(Service)錛屽茍鎶奝rocessor*浣滀負鍙傛暟浼犺繘鍘匯傞渶瑕佹敞鎰忕殑浜嬶紝灝界榪欓噷浣跨敤
鐨勬槸榪欎竴涓瀯閫犲嚱鏁癝ervice(Processor*)銆傛垜浠粛闇姹備負Service綾誨畾涔夐粯璁ょ殑鏋勯犲嚱鏁幫紝浠ユ弧瓚蟲ā鏉跨被ACE_Acceptor鐨勯渶瑕併?/p>
聽
Stone Jiang
涓婁竴綃囨垜浠湅浜咥CE_Svc_Handler::open()鎸傚嬀鍑芥暟鎻愪緵榛樿琛屼負鐨勪竴浜涙妧宸с傚洜涓哄湪澶у鏁版儏鍐典笅錛屽畠瀹屾垚浜嗘湇鍔″垱寤烘椂鎵闇鐨勬墍鏈変簨鎯咃細涓鴻緭鍏ヤ簨浠舵敞鍐屾柊澶勭悊鍣ㄥ拰榪斿洖銆?/p>
鍦ˋCE_Svc_Handler涓叧闂搷浣滅殑榛樿琛屼負瑕佹瘮鍦╫pen()涓垵濮嬪寲鐨勪唬鐮佹洿涓哄鏉傘傝繖鏄洜涓哄叧闂椂鐨勬寕鍕懼嚱鏁板寘鍚簡鍙嶅簲寮?reactive)鍏抽棴鍜屼富鍔ㄥ紡(active-object)鍏抽棴涓ょ鎯?/p>
鍐碉紝瀹冧滑鏈夌浉鍚岀殑鏁堟灉:鍒犻櫎鎵鏈夊湪鍙嶅簲鍣ㄦ敞鍐岀殑浜嬩歡鍜岀‘淇濆垹闄CE_Svc_handler鐨勬淳鐢熺被鐨勫璞°?/p>
聽
鍙嶅簲寮忓叧闂?handle_close()): 褰撲互涓嬪艦鍐靛彂鐢熸椂琚皟鐢細
聽1) 浜嬩歡鍥炶皟鍑芥暟(璇戞敞錛歨andle_xxxx())榪斿洖-1鏃訛紝鎴?br />聽2) 璋冪敤ACE_Reactor::remove_handler()錛屼紶鍏ョ殑鏍囪涓嶅惈 DONT_CALL鏃?br />聽鍙嶅簲鍣ㄦ鏋跺皢璋冪敤handle_close()鎸傚嬀鍑芥暟銆?ACE_Svc_handler::handle_close()鐨勯粯璁よ涓烘槸璋冪敤ACE_Svc_Handler::destroy()閿姣佷簨浠跺鐞嗗櫒銆?/p>
涓誨姩瀵硅薄寮忓叧闂?close()): 褰揂CE_Svc_Handler 媧劇敓鐨勫璞¢氳繃activate()鍑芥暟杞彉涓轟富鍔ㄥ璞★紝澶勭悊鍣ㄧ殑鐨剆vc()鏂規硶鍦ㄥ畠浜х敓鐨勭嚎紼嬩腑榪愯鍚庤繘琛屽洖璋冦傚綋svc()榪斿洖鏃訛紝綰跨▼
閫鍑猴紝浣嗗湪瀹冭閫鍑烘椂錛屼粛鍦ㄥ皢瑕侀鍑虹嚎紼嬬殑涓婁笅鏂囦腑錛孉CE_Task妗嗘灦璋冪敤瀹冪殑close()鏂規硶銆侫CE_Svc_Handler::close()鏂規硶璋冪敤handle_close()瀹屾垚鏈嶅姟澶勭悊鍣ㄧ殑娓呯悊宸ヤ綔銆?/p>
鍥犳錛屼笉綆CE_Svc_Handler瀵硅薄鏄弽搴斿紡榪樻槸涓誨姩寮忥紝緇撴潫鏃剁殑娓呯悊宸ヤ綔閮藉湪鐩稿悓鐨勫湴鏂癸細ACE_Svc_Handler::destroy()銆傚鏋滃璞℃槸鍔ㄦ佸垎閰嶄笖涓嶆槸ACE_Stream妗嗘灦涓殑緇勬垚閮?/p>
鍒嗭紝destroy()灝嗗垹闄ゆ瀵硅薄錛屽鏋滃璞′笉鏄姩鎬佸垎閰嶇殑錛屾瀽鏋勫畠鐨勮矗浠繪槸鍒涘緩鏃跺璞℃墍鍦ㄧ殑灝侀棴鑼冨洿銆傚鏋滃璞℃槸ACE_Stream鐨勬ā鍧楃殑緇勬垚閮ㄥ垎錛屾祦鍜?鎴栨帶鍒舵祦鐨勪唬鐮佽礋璐g鐞?/p>
瀵硅薄鐨勭敓鍛芥湡銆俤estroy()鍑芥暟搴旈伒瀹堣繖鏍風殑瑙勫垯鏉ラ伩鍏嶅嚭鐜拌祫婧愭硠婕忋?/p>
鏃犺ACE_Svc_Handler瀵硅薄鏄弽搴斿紡閿姣佽繕鏄富鍔ㄥ紡閿姣侊紝閮戒細寮曡搗鐩稿悓鐨勪簨鎯呭彂鐢燂細~ACE_Svc_Handler() (澶勭悊鍣ㄧ殑鏋愭瀯鍑芥暟)璋冪敤ACE_Svc_Handler::shutdown()鍑芥暟瀹屾垚鏈嶅姟澶?/p>
鐞嗗櫒鐨勬竻鐞嗗伐浣溿俿hutdown()鎵ц鐨勮繖浜涙竻鐞嗘搷浣滄槸錛?/p>
聽
濡傛灉澶勭悊鍣ㄤ笌鍙嶅簲鍣ㄦ槸鍏寵仈鐨勶細
聽聽 鍙栨秷澶勭悊鍣ㄥ叧鑱旂殑鎵鏈夊畾鏃跺櫒銆?br />聽聽 涓哄鐞嗗櫒鐨勬祦瀵硅薄錛堝socket)鍒犻櫎鎵鏈夊凡娉ㄥ唽鐨勪簨浠躲?br />濡傛灉澶勭悊鍣ㄤ笌鍐嶇敓鍣?recycler)鏄叧緋葷殑錛屼粠鍐嶇敓鍣ㄤ腑娓呴櫎澶勭悊鍣ㄣ?br />鍏抽棴嫻佸璞°?br />鍥犳錛屾垜浠湅鍒扮殑緇濆ぇ澶氭暟鎯呭喌鏈嶅姟澶勭悊鍣ㄩ氳繃shutdown闇瑕侀氳繃妗嗘灦鏉ユ竻鐞嗗伐浣滐紝閮芥槸綆鍗曠殑鍏佽緙虹渷鐨勬寕鍕懼嚱鏁板緱浠ヨ璋冪敤銆傚鏋滀綘鐨勫簲鐢ㄧ▼搴忛渶姹傛洿澶氱殑鍏抽棴/娓呯悊瑙勫垯錛屾帹
鑽愮殑鍦版柟鏄綘鐨勫鐞嗗櫒鐨刪andle_close()鎸傚嬀鏂規硶銆備粎浠呮槸紜繚鎶夾CE_Svc_Handler::destroy()鍑芥暟浜轟綔涓轟綘鐨刪andle_close()鐨勬渶鍚庝竴涓姩浣滐紝涓庢鏋舵竻鐞嗚涓虹殑浣欎笅鐨勮涓哄悎
騫躲?/p>
聽
Stone JiangACE_Svc_Handler緇忓父鐢ㄤ簬緗戠粶鏈嶅姟綾葷殑鍩虹被錛岃繖鏄洜涓哄畠寰堝鏄撳湪涓誨姩瀵硅薄(Active Ojbect)
妯″紡鍜屽弽搴斿櫒(Reactor)妗嗘灦涓嬌鐢ㄣ侫PG絎?.6鑺備腑璁ㄨ浜嗘庝箞鍦ㄦ帴鍙楀櫒-榪炴帴鍣?Acceptor-conector)
妗嗘灦涓浣曟妸ACE_Svc_Handler浣滀負鐩爣鏉ヤ嬌鐢紝騫朵笖錛屽湪C++NPv2絎?绔犱腑錛屾繁搴︽帰璁ㄤ簡
Acceotor-Connector鐨勭浉鍏寵璁°?/pre>鎸傚嬀鍑芥暟(Hook method)ACE_Svc_Handler::open()甯告槸鏈嶅姟涓柊寤鴻繛鎺ユ椂鎵ц鐨勫垵濮嬪寲璁劇疆鐨勫湴鏂廣?br />涓句緥鏉ヨ錛屽鏋滄湇鍔¤鍦ㄦ棩蹇椾腑璁板綍鏂拌繛鎺ュ緩绔嬬殑鐩稿叧淇℃伅錛宱pen()鍑芥暟鏄垯鏄褰曡繖涓俊鎭殑鍦版柟銆?br />瀵逛簬浣跨敤Reacotor 妗嗘灦鐨勬湇鍔℃鏌ョ綉緇滄暟鎹埌杈撅紝open()鏄墽琛宺eactor娉ㄥ唽鐨勫湴鏂廣?br />浜嬪疄涓婏紝榪欐鏄痳eactor娉ㄥ唽鐨勫湴鏂癸紝榪欑鍔ㄤ綔鍦ㄦ湇鍔″緩绔嬫柊榪炴帴鏃墮潪甯稿父瑙佺殑錛孉CE_Svc_Handler::
open()鐨勭己鐪佹搷浣滀篃姝f槸if (this->reactor () && this->reactor ()->register_handler (this, ACE_Event_Handler::READ_MASK) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_LIB_TEXT ("%p\n"), ACE_LIB_TEXT ("unable to register client handler")), -1); return 0;鎵浠ワ紝濡傛灉鍦ㄤ笌鏈嶅姟寤虹珛鏂拌繛鎺ュ茍涓衡滆浜嬩歡鈥濇敞鍐屾椂錛屼綘鐢氳嚦涓嶉渶瑕佸湪浣犵殑綾諱腑
瀹炵幇open(void*)鍑芥暟錛孉CE宸茬粡涓轟綘鍋氫簡榪欎竴姝?鍙﹀錛岃璁頒綇錛屽鏋渞eactor娉ㄥ唽澶辮觸錛?br />榛樿鐨刼pen()鍑芥暟浼氳繑鍥?1錛屽畠浼氬紩璧稟cceptor-Connector妗嗘灦鍏抽棴鏂板緩鐨勮繛鎺ュ拰鍒犻櫎榪欎釜
浜嬩歡澶勭悊鍣?handler)銆?br />Stone Jiang
http://www.shnenglu.com/ace/Stone Jiang 2006-08-27 23:48 鍙戣〃璇勮]]>