锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
闂灝辮В鍐沖暒錛佸搱鍝堬紒
Q錛欵rror C1189 Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
A:Go to the project properties (Project menu, Properties). Set 'Use of MFC' to "Use MFC in a Shared DLL". You have to make this change for both the debug and release configurations
]]>
1錛宑onst char*錛圕椋庢牸瀛楃涓詫級涓巗tring涔嬮棿杞崲錛?/span>
錛?錛?const char*鍙互鐩存帴瀵箂tring綾誨瀷璧嬪鹼紝渚嬪錛?/span>
const char* pchar = "qwerasdf";
stringstr = pchar;
錛?錛?string閫氳繃c_str()鍑芥暟杞崲涓篊椋庢牸瀛楃涓詫紝渚嬪錛?/span>
string str = "qwerasdf";
const char* pchar = str.c_str();
2錛宑onst char*綾誨瀷鍙互鐩存帴緇機String綾誨瀷璧嬪鹼紝渚嬪錛?/span>
const char* pchar = "qwerasdf";
CString str = pchar;
3錛宻tring綾誨瀷鍙橀噺杞負涓篊string綾誨瀷鍙橀噺
CString綾誨瀷鍙橀噺鍙互鐩存帴緇檚tring綾誨瀷鍙橀噺璧嬪鹼紝浣嗘槸string綾誨瀷涓嶈兘瀵笴String綾誨瀷鐩存帴璧嬪箋傞氳繃鍓嶄袱綾?/span>
杞崲鎴戜滑鍙互寰楀埌錛?/span>string綾誨瀷鍙橀噺杞崲涓篶onst char*綾誨瀷錛岀劧鍚庡啀鐩存帴璧嬪煎氨鍙互浜嗐備緥濡傦細
CString cstr錛?/span>
sring str = “asdasd”錛?/span>
cstr = str.c_str();
鍚岀悊錛孋Strng綾誨瀷鍙橀噺鍏堣漿鎹負string綾誨瀷鍦ㄨ皟鐢╟_str()鍑芥暟灝卞彲浠ュ畬鎴愬悜const char*綾誨瀷鐨勮漿鎹€備緥濡傦細
CString cStr = "adsad";
string str = cStr;
const char* pchar = str.c_str();
4錛宒ouble錛宨nt杞瑂tring
double temp;
stringstream strStream;
strStream<<temp;
string ss = strStream.str()
string 杞琩ouble錛宨nt
string.atoi , string.atof
浠庝笂闈㈡垜浠彲浠ヤ笂闈㈢湅鍑猴紝閫氳繃綾誨瀷涔嬮棿鐨勭浉浜掕漿鍖栵紝浼氫嬌鏈潵瑕侀氳繃澶嶆潅鐨勫嚱鏁版潵瀹屾垚鐨勭被鍨嬭漿鎹㈠彉寰楃畝鍗曟槗鎳傘?/span>
TinyXML鏄竴涓紑婧愮殑瑙f瀽XML鐨勮В鏋愬簱錛岃兘澶熺敤浜?/span>C++錛岃兘澶熷湪Windows鎴?/span>Linux涓紪璇戙傝繖涓В鏋愬簱鐨勬ā鍨嬮氳繃瑙f瀽XML鏂囦歡錛岀劧鍚庡湪鍐呭瓨涓敓鎴?/span>DOM妯″瀷錛屼粠鑰岃鎴戜滑寰堟柟渚跨殑閬嶅巻榪欐5XML鏍戙?/span>
DOM妯″瀷鍗蟲枃妗e璞℃ā鍨嬶紝鏄皢鏁翠釜鏂囨。鍒嗘垚澶氫釜鍏冪礌錛堝涔︺佺珷銆佽妭銆佹絳夛級錛屽茍鍒╃敤鏍戝瀷緇撴瀯琛ㄧず榪欎簺鍏冪礌涔嬮棿鐨勯『搴忓叧緋諱互鍙婂祵濂楀寘鍚叧緋匯?br /> 涓嶈繃TinyXml闇瑕佷嬌鐢ㄨ呮墜鍔ㄩ噴鏀緉ew鍑虹殑鍐呭瓨銆傚垵瀛++鑰呭線寰瀹規槗閫犳垚鍐呭瓨娉勯湶銆?/span>
CWnd::GetClientRect
Parameters:
lpRect
Remarks:
CWnd::GetWindowRect
void GetWindowRect( LPRECT lpRect ) const;
Parameters:
lpRect
Points to a CRect object or a RECT structure that will receive the screen coordinates of the upper-left and lower-right corners.
Remarks:
Copies the dimensions of the bounding rectangle of the CWnd object to the structure pointed to by lpRect. The dimensions are given in screen coordinates relative to the upper-left corner of the display screen. The dimensions of the caption, border, and scroll bars, if present, are included.
GetWindowRect() 寰楀埌鐨勬槸鍦ㄥ睆騫曞潗鏍囩郴涓嬬殑RECT錛涳紙鍗充互灞忓箷宸︿笂瑙掍負鍘熺偣錛?br />GetClientRect() 寰楀埌鐨勬槸鍦ㄥ鎴峰尯鍧愭爣緋諱笅鐨凴ECT錛?錛?font color="#800000">鍗充互鎵鍦ㄧ獥鍙e乏涓婅涓哄師鐐?/font>錛?br />
GetWindowRect()鍙栫殑鏄暣涓獥鍙g殑鐭╁艦錛?br />GetClientRect()鍙栫殑浠呮槸瀹㈡埛鍖虹殑鐭╁艦錛屼篃灝辨槸璇翠笉鍖呮嫭鏍囬鏍忥紝澶栨絳夛紱
絎竴涓嚱鏁拌幏寰楃殑鏄獥鍙e湪灞忓箷涓婄殑浣嶇疆錛屽緱鍒扮殑緇撴灉鍙兘鏄繖鏍稢Rect(10,10,240,240);
絎簩涓嚱鏁板拰瀹冧笉鍚岋紝瀹冨彧鑾峰緱浜嗗鎴峰尯鐨勫ぇ灝忥紝鍥犳寰楀埌鐨勭粨鏋滄繪槸榪欐牱CRect(0,0,width,height);
ScreenToClient() 灝辨槸鎶婂睆騫曞潗鏍囩郴涓嬬殑RECT鍧愭爣杞崲涓哄鎴峰尯鍧愭爣緋諱笅鐨凴ECT鍧愭爣銆?/font>
The GetClientRect function retrieves the coordinates of a window's client area. The client coordinates specify the upper-left and lower-right corners of the client area. Because client coordinates are relative to the upper-left corner of a window's client area, the coordinates of the upper-left corner are (0,0).
GetClientRect寰楀埌鐨勬槸瀹㈡埛鍖虹殑澶у皬錛屼篃灝辨槸璇磋繖鏍峰緱鍒扮殑宸︿笂瑙掓案榪滄槸錛?錛?錛?/font>
The GetWindowRect function retrieves the dimensions of the bounding rectangle of the specified window. The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
GetWindowRect 鏄獥鍙g浉瀵逛簬鏁翠釜灞忓箷鐨勫潗鏍囷紝灞忓箷宸︿笂鐐逛負0錛?
鐩鎬簰杞寲鐢⊿creenToClient 鎴栬?ClientToScreen
ClientToScreen
The ClientToScreen function converts the client coordinates of a specified point to screen coordinates.
BOOL ClientToScreen(
);
Parameters
hWnd
Handle to the window whose client area is used for the conversion.
lpPoint
Pointer to a POINT structure that contains the client coordinates to be converted. The new screen coordinates are copied into this structure if the function succeeds.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
铏界劧瀛樺湪璋冪敤GetWindowRect鍚庡啀璋冪敤ScreenToClient==GetClientRect錛屼絾ScreenToClient錛堬級鍜孋lientToScreen()涓よ呴兘鏄睘浜嶹INDOWS API鍑芥暟錛屽彲鑳芥槸瀛樺湪涓瀹氱殑鍐椾綑璁捐錛屼絾鎰忎箟涓嶅悓銆?br />涓嶈繃鍦?Net Framework涓嬪WINDOWS API鍑芥暟榪涜浜嗛噸鏂版暣鐞嗗拰浼樺寲錛屽湪鑾峰彇鎺т歡鎴栫獥鍙g殑灞忓箷鍧愭爣鍜屽鎴峰尯鍧愭爣鏃舵洿鏂逛究鐨勫錛屽彧闇瑕佸緱鍒頒笌鎺т歡鎴栫獥鍙g浉瀵瑰簲灞忓箷鍧愭爣鍜屽鎴峰尯鍧愭爣灞炴у煎氨鍙互浜?/font>銆?/font>
錛?/p>
1) NOOP
NOOP綆楁硶鐨勫叏鍐欎負No Operation銆傝綆楁硶瀹炵幇浜嗘渶鏈綆鍗曠殑FIFO闃熷垪錛屾墍鏈塈O璇鋒眰澶ц嚧鎸夌収鍏堟潵鍚庡埌鐨勯『搴忚繘琛屾搷浣溿備箣鎵浠ヨ“澶ц嚧”錛?/p>
鍘熷洜鏄疦OOP鍦‵IFO鐨勫熀紜涓婅繕鍋氫簡鐩擱偦IO璇鋒眰鐨勫悎騫訛紝騫朵笉鏄畬瀹屽叏鍏ㄦ寜鐓у厛榪涘厛鍑虹殑瑙勫垯婊¤凍IO璇鋒眰銆侼OOP鍋囧畾I/O璇鋒眰鐢遍┍鍔ㄧ▼搴忔垨鑰呰
澶囧仛浜嗕紭鍖栨垨鑰呴噸鎺掍簡欏哄簭(灝卞儚涓涓櫤鑳芥帶鍒跺櫒瀹屾垚鐨勫伐浣滈偅鏍?銆傚湪鏈変簺SAN鐜涓嬶紝榪欎釜閫夋嫨鍙兘鏄渶濂介夋嫨銆侼oop 瀵逛簬 IO 涓嶉偅涔堟搷
蹇冿紝瀵規墍鏈夌殑 IO璇鋒眰閮界敤 FIFO 闃熷垪褰㈠紡澶勭悊錛岄粯璁よ涓?IO 涓嶄細瀛樺湪鎬ц兘闂銆傝繖涔熶嬌寰?CPU 涔熶笉鐢ㄩ偅涔堟搷蹇冦?a >www.linuxidc.com褰撶劧
錛屽浜庡鏉備竴鐐圭殑搴旂敤綾誨瀷錛屼嬌鐢ㄨ繖涓皟搴﹀櫒錛岀敤鎴瘋嚜宸卞氨浼氶潪甯告搷蹇冦?
2) Deadline scheduler
DEADLINE鍦–FQ鐨勫熀紜涓婏紝瑙e喅浜咺O璇鋒眰楗挎鐨勬瀬绔儏鍐點傞櫎浜咰FQ鏈韓鍏鋒湁鐨処O鎺掑簭闃熷垪涔嬪錛孌EADLINE棰濆鍒嗗埆涓鴻IO鍜屽啓IO鎻愪緵浜咶IFO
闃熷垪銆傝FIFO闃熷垪鐨勬渶澶х瓑寰呮椂闂翠負500ms錛屽啓FIFO闃熷垪鐨勬渶澶х瓑寰呮椂闂翠負5s銆侳IFO闃熷垪鍐呯殑IO璇鋒眰浼樺厛綰ц姣擟FQ闃熷垪涓殑楂橈紝錛岃岃FIFO
闃熷垪鐨勪紭鍏堢駭鍙堟瘮鍐橣IFO闃熷垪鐨勪紭鍏堢駭楂樸備紭鍏堢駭鍙互琛ㄧず濡備笅錛?
FIFO(Read) > FIFO(Write) > CFQ
deadline 綆楁硶淇濊瘉瀵逛簬鏃㈠畾鐨?IO 璇鋒眰浠ユ渶灝忕殑寤惰繜鏃墮棿錛屼粠榪欎竴鐐圭悊瑙o紝瀵逛簬 DSS 搴旂敤搴旇浼氭槸寰堥傚悎鐨勩?/p>
3) Anticipatory scheduler
CFQ鍜孌EADLINE鑰冭檻鐨勭劍鐐瑰湪浜庢弧瓚抽浂鏁O璇鋒眰涓娿傚浜庤繛緇殑IO璇鋒眰錛屾瘮濡傞『搴忚錛屽茍娌℃湁鍋氫紭鍖栥備負浜嗘弧瓚抽殢鏈篒O鍜岄『搴廔O娣峰悎鐨勫満鏅紝
Linux榪樻敮鎸丄NTICIPATORY璋冨害綆楁硶銆侫NTICIPATORY鐨勫湪DEADLINE鐨勫熀紜涓婏紝涓烘瘡涓IO閮借緗簡6ms 鐨勭瓑寰呮椂闂寸獥鍙c傚鏋滃湪榪?ms鍐匫S鏀?/p>
鍒頒簡鐩擱偦浣嶇疆鐨勮IO璇鋒眰錛屽氨鍙互绔嬪嵆婊¤凍
Anticipatory scheduler錛坅s) 鏇劇粡涓搴︽槸 Linux 2.6 Kernel 鐨?IO scheduler 銆侫nticipatory 鐨勪腑鏂囧惈涔夋槸”棰勬枡鐨? 棰勬兂鐨?#8221;, 榪欎釜
璇嶇殑紜彮紺轟簡榪欎釜綆楁硶鐨勭壒鐐癸紝綆鍗曠殑璇達紝鏈変釜 IO 鍙戠敓鐨勬椂鍊欙紝濡傛灉鍙堟湁榪涚▼璇鋒眰 IO 鎿嶄綔錛屽垯灝嗕駭鐢熶竴涓粯璁ょ殑 6 姣鐚滄祴鏃墮棿錛岀寽嫻?/p>
涓嬩竴涓?榪涚▼璇鋒眰 IO 鏄騫蹭粈涔堢殑銆傝繖瀵逛簬闅忓嵆璇誨彇浼氶犳垚姣旇緝澶х殑寤舵椂錛屽鏁版嵁搴撳簲鐢ㄥ緢緋熺硶錛岃屽浜?Web Server 絳夊垯浼氳〃鐜扮殑涓嶉敊銆?/p>
榪欎釜綆楁硶涔熷彲浠ョ畝鍗曠悊瑙d負闈㈠悜浣庨熺鐩樼殑錛屽洜涓洪偅涓?#8221;鐚滄祴”瀹為檯涓婄殑鐩殑鏄負浜嗗噺灝戠澶寸Щ鍔ㄦ椂闂淬?/p>
4錛塁FQ
CFQ綆楁硶鐨勫叏鍐欎負Completely Fair Queuing銆傝綆楁硶鐨勭壒鐐規槸鎸夌収IO璇鋒眰鐨勫湴鍧榪涜鎺掑簭錛岃屼笉鏄寜鐓у厛鏉ュ悗鍒扮殑欏哄簭鏉ヨ繘琛屽搷搴斻?
鍦ㄤ紶緇熺殑SAS鐩樹笂錛岀鐩樺閬撹姳鍘諱簡緇濆ぇ澶氭暟鐨処O鍝嶅簲鏃墮棿銆侰FQ鐨勫嚭鍙戠偣鏄IO鍦板潃榪涜鎺掑簭錛屼互灝介噺灝戠殑紓佺洏鏃嬭漿嬈℃暟鏉ユ弧瓚沖敖鍙兘澶氱殑
IO璇鋒眰銆傚湪CFQ綆楁硶涓嬶紝SAS鐩樼殑鍚炲悙閲忓ぇ澶ф彁楂樹簡銆備絾鏄浉姣斾簬NOOP鐨勭己鐐規槸錛屽厛鏉ョ殑IO璇鋒眰騫朵笉涓瀹氳兘琚弧瓚籌紝鍙兘浼氬嚭鐜伴タ姝葷殑鎯呭喌銆?
Completely Fair Queuing 錛坈fq, 瀹屽叏鍏鉤闃熷垪) 鍦?2.6.18 鍙栦唬浜?Anticipatory scheduler 鎴愪負 Linux Kernel 榛樿鐨?IO scheduler
銆俢fq 瀵規瘡涓繘紼嬬淮鎶や竴涓?IO 闃熷垪錛屽悇涓繘紼嬪彂鏉ョ殑 IO 璇鋒眰浼氳 cfq 浠ヨ疆寰柟寮忓鐞嗐備篃灝辨槸瀵規瘡涓涓?IO 璇鋒眰閮芥槸鍏鉤鐨勩傝繖浣垮緱
cfq 寰堥傚悎紱繪暎璇葷殑搴旂敤(eg: OLTP DB)銆傛垜鎵鐭ラ亾鐨勪紒涓氱駭 Linux 鍙戣鐗堜腑錛孲USE Linux 濂藉儚鏄渶鍏堥粯璁ょ敤 cfq 鐨?
鏌ョ湅鍜屼慨鏀笽O璋冨害鍣ㄧ殑綆楁硶闈炲父綆鍗曘傚亣璁炬垜浠瀵箂da榪涜鎿嶄綔錛屽涓嬫墍紺猴細
cat /sys/block/sda/queue/scheduler
echo “cfq” > /sys/block/sda/queue/scheduler
鎬葷粨:
1 CFQ鍜孌EADLINE鑰冭檻鐨勭劍鐐瑰湪浜庢弧瓚抽浂鏁O璇鋒眰涓娿傚浜庤繛緇殑IO璇鋒眰錛屾瘮濡傞『搴忚錛屽茍娌℃湁鍋氫紭鍖栥備負浜嗘弧瓚抽殢鏈篒O鍜岄『搴廔O娣峰悎鐨勫満鏅?/p>
錛孡inux榪樻敮鎸丄NTICIPATORY璋冨害綆楁硶銆侫NTICIPATORY鐨勫湪DEADLINE鐨勫熀紜涓婏紝涓烘瘡涓IO閮借緗簡6ms鐨勭瓑寰呮椂闂寸獥鍙c傚鏋滃湪榪?ms鍐匫S鏀?/p>
鍒頒簡鐩擱偦浣嶇疆鐨勮IO璇鋒眰錛屽氨鍙互绔嬪嵆婊¤凍銆?/p>
IO璋冨害鍣ㄧ畻娉曠殑閫夋嫨錛屾棦鍙栧喅浜庣‖浠剁壒寰侊紝涔熷彇鍐充簬搴旂敤鍦烘櫙銆?
鍦ㄤ紶緇熺殑SAS鐩樹笂錛孋FQ銆丏EADLINE銆丄NTICIPATORY閮芥槸涓嶉敊鐨勯夋嫨錛涘浜庝笓灞炵殑鏁版嵁搴撴湇鍔″櫒錛孌EADLINE鐨勫悶鍚愰噺鍜屽搷搴旀椂闂撮兘琛ㄧ幇鑹ソ銆?/p>
鐒惰屽湪鏂板叴鐨勫浐鎬佺‖鐩樻瘮濡係SD銆丗usion IO涓婏紝鏈綆鍗曠殑NOOP鍙嶈屽彲鑳芥槸鏈濂界殑綆楁硶錛屽洜涓哄叾浠栦笁涓畻娉曠殑浼樺寲鏄熀浜庣緝鐭閬撴椂闂寸殑錛岃?/p>
鍥烘佺‖鐩樻病鏈夋墍璋撶殑瀵婚亾鏃墮棿涓擨O鍝嶅簲鏃墮棿闈炲父鐭?/p>
2 瀵逛簬鏁版嵁搴撳簲鐢? Anticipatory Scheduler 鐨勮〃鐜版槸鏈宸殑銆侱eadline 鍦?DSS 鐜琛ㄧ幇姣?cfq 鏇村ソ涓鐐癸紝鑰?cfq 緇煎悎鏉ョ湅琛ㄧ幇鏇村ソ涓
浜涖傝繖涔熼毦鎬?RHEL 4 榛樿鐨?IO 璋冨害鍣ㄨ緗負 cfq. 鑰?RHEL 4 姣?RHEL 3錛屾暣浣?IO 鏀硅繘榪樻槸涓嶅皬鐨勩?