锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
2.鍘熺悊錛?br />C++涓嶆槸鍔ㄦ佽璦錛屾墍浠ユ病娉曚粠璇█鏈哄埗涓婂疄鐜扮被鐨勫姩鎬佸垱寤猴紝浣嗚繖鏍風殑闇姹傚嵈鏈夊彲鑳藉瓨鍦紝涓涓被浼肩殑渚嬪瓙渚挎槸MFC涓瑿Wnd綾葷殑Create鏂規硶錛屽叾絎竴涓弬鏁頒負Window Class鐨勫悕瀛楋紝榪欏氨鍏佽鐢ㄦ埛閫氳繃class鐨勫悕瀛楁潵鍒涘緩鐩稿簲鐨勭獥鍙c?/div>
3.瀹炵幇:
鍙互鐢ㄥ畯鏉ヤ唬鏇匡細
瀹炵幇鍘熺悊:
鍩虹被閲岄潰鐢╩ap綆$悊鎵鏈夐渶瑕佸姩鎬佸垱寤?nbsp;銆愮被鍚?鍒涘緩瀵硅薄鐨勫嚱鏁版寚閽堛?br /> 鍩虹被澹版槑涓渶瑕佹坊鍔?nbsp;DECLEAR_DYNCRT_BASE 瀹?cpp瀹炵幇涓娣誨姞 IMPLEMENT_DYNCRT_BASE 瀹?br /> 媧劇敓綾誨0鏄庝腑闇瑕佹坊鍔?nbsp;DECLEAR_DYNCRT_CLASS 瀹忥紝cpp瀹炵幇涓娣誨姞 IMPLEMENT_DYNCRT_CLASS 瀹?br /> 媧劇敓綾誨畯涓垱寤轟簡涓涓叏灞瀵硅薄鍚戝熀綾籱ap涓敞鍐屻愮被鍚?鍒涘緩瀵硅薄鐨勫嚱鏁版寚閽堛?br /> */
#include <map>
// 澹版槑鍏鋒湁鍔ㄦ佸垱寤虹殑鍩虹被
#define DECLEAR_DYNCRT_BASE(base) \
public: \
typedef base* (*ClassGen)(); \
static void _register(const char* class_name, ClassGen class_gen) \
{ \
class_set.insert(std::map<const char*, ClassGen>::value_type(class_name, class_gen)); \
} \
static base* create(const char* class_name) \
{ \
std::map<const char*, ClassGen>::iterator it = class_set.find(class_name); \
if (it != class_set.end()) \
return (it->second)(); \
return NULL; \
} \
protected: \
static std::map<const char*, ClassGen> class_set;
// 鐢ㄤ簬瀹炵幇鍩虹被
#define IMPLEMENT_DYNCRT_BASE(base) \
std::map<const char*, base::ClassGen> base::class_set;
// 鐢ㄤ簬澹版槑涓涓兘澶熻鍔ㄦ佸垱寤虹殑綾?鐢ㄤ竴涓叏灞瀵硅薄榪涜娉ㄥ唽)
#define DECLEAR_DYNCRT_CLASS(derived, base) \
public: \
struct derived##register \
{ \
derived##register() \
{ \
static bool bRegister = false; \
if (!bRegister) \
{ \
base::_register(#derived, _CreateObjectByName); \
bRegister = true; \
} \
} \
}; \
static base* _CreateObjectByName() \
{ \
return new derived; \
}
// 鐢ㄤ簬瀹炵幇涓涓兘琚姩鎬佸垱寤虹殑綾?/span>
#define IMPLEMENT_DYNCRT_CLASS(derived) \
static derived::derived##register _##derived##global_object;
鎴戜滑闇瑕佸仛鐨勫氨鏄槸鍝﹂偅涓繖鍥涗釜瀹?br />闄勫姞涓婃祴璇曚唬鐮侊細
class Base
{
DECLEAR_DYNCRT_BASE(Base)
DECLEAR_DYNCRT_CLASS(Base, Base)
public:
virtual void Print()
{
std::cout << "This is base!" << std::endl;
}
};
IMPLEMENT_DYNCRT_BASE(Base)
IMPLEMENT_DYNCRT_CLASS(Base)
class Derived : public Base
{
DECLEAR_DYNCRT_CLASS(Derived, Base)
public:
virtual void Print()
{
cout << "This is derived!" << endl;
}
};
IMPLEMENT_DYNCRT_CLASS(Derived)
int main()
{
Base* base = Base::create("Base");
if (base)
base->Print();
system("pause");
return 0;
}
鍙傝冨湴鍧錛?a >http://blog.csdn.net/freefalcon/article/details/109275
(涓)瀹氫箟鍑芥暟鎸囬拡
// PFN鏄嚱鏁版寚閽?br />char (*PFN)(int);
char gpfn(int val)
{
cout << val << endl;
return 1;
}
榪欎袱縐嶆柟娉曢兘鍙敤錛孋++primer涓婃湁璇存槑 sort鍏佽浣跨敤鑷繁瀹氫箟鐨勬瘮杈冨嚱鏁?絎笁涓弬鏁? http://www.cnblogs.com/ly4cn/archive/2005/11/28/286185.html http://ly4cn.cnblogs.com/archive/2005/12/17/299007.html 涓轟粈涔堣瀛︿範 濡傛灉浣犲凡涔犳儻浜?lt;stdio.h>椋庢牸鐨勮漿鎹紝涔熻浣犻鍏堜細闂細涓轟粈涔堣鑺遍澶栫殑綺懼姏鏉ュ涔犲熀浜?lt;sstream>鐨勭被鍨嬭漿鎹㈠憿錛熶篃璁稿涓嬮潰涓涓畝鍗曠殑渚嬪瓙鐨勫洖欏捐兘澶熻鏈嶄綘銆傚亣璁句綘鎯崇敤sprintf()鍑芥暟灝嗕竴涓彉閲忎粠int綾誨瀷杞崲鍒板瓧絎︿覆綾誨瀷銆備負浜嗘紜湴瀹屾垚榪欎釜浠誨姟錛屼綘蹇呴』紜繚璇佺洰鏍囩紦鍐插尯鏈夎凍澶熷ぇ絀洪棿浠ュ綰寵漿鎹㈠畬鐨勫瓧絎︿覆銆傛澶栵紝榪樺繀欏諱嬌鐢ㄦ紜殑鏍煎紡鍖栫銆傚鏋滀嬌鐢ㄤ簡涓嶆紜殑鏍煎紡鍖栫錛屼細瀵艱嚧闈為鐭ョ殑鍚庢灉銆備笅闈㈡槸涓涓緥瀛愶細 int n=10000; chars[10]; sprintf(s,”%d”,n);// s涓殑鍐呭涓?#8220;10000” char s[10]; sprintf(s,”%f”,n);// 鐪嬶紒閿欒鐨勬牸寮忓寲絎?br /> 鍦ㄨ繖縐嶆儏鍐典笅錛岀▼搴忓憳閿欒鍦頒嬌鐢ㄤ簡%f鏍煎紡鍖栫鏉ユ浛浠d簡%d銆傚洜姝わ紝s鍦ㄨ皟鐢ㄥ畬sprintf()鍚庡寘鍚簡涓涓笉紜畾鐨勫瓧絎︿覆銆傝鏄兘鑷姩鎺ㄥ鍑烘紜殑綾誨瀷錛岄偅涓嶆槸鏇村ソ鍚楋紵 string鍒癷nt鐨勮漿鎹?br /> 閲嶅鍒╃敤stringstream瀵硅薄 濡傛灉浣犳墦綆楀湪澶氭杞崲涓嬌鐢ㄥ悓涓涓猻tringstream瀵硅薄錛岃浣忓啀姣忔杞崲鍓嶈浣跨敤clear()鏂規硶錛?/p>
鍦ㄥ嬈¤漿鎹腑閲嶅浣跨敤鍚屼竴涓猻tringstream錛堣屼笉鏄瘡嬈¢兘鍒涘緩涓涓柊鐨勫璞★級瀵硅薄鏈澶х殑濂藉鍦ㄤ簬鏁堢巼銆俿tringstream瀵硅薄鐨勬瀯閫犲拰鏋愭瀯鍑芥暟閫氬父鏄潪甯歌楄垂CPU鏃墮棿鐨勩?/p>
鍦ㄧ被鍨嬭漿鎹腑浣跨敤妯℃澘 浣犲彲浠ヨ交鏉懼湴瀹氫箟鍑芥暟妯℃澘鏉ュ皢涓涓換鎰忕殑綾誨瀷杞崲鍒扮壒瀹氱殑鐩爣綾誨瀷銆備緥濡傦紝闇瑕佸皢鍚勭鏁板瓧鍊鹼紝濡俰nt銆乴ong銆乨ouble絳夌瓑杞崲鎴愬瓧絎︿覆錛岃浣跨敤浠ヤ竴涓猻tring綾誨瀷鍜屼竴涓換鎰忓?em>t涓哄弬鏁扮殑to_string()鍑芥暟銆倀o_string()鍑芥暟灝?em>t杞崲涓哄瓧絎︿覆騫跺啓鍏esult涓備嬌鐢╯tr()鎴愬憳鍑芥暟鏉ヨ幏鍙栨祦鍐呴儴緙撳啿鐨勪竴浠芥嫹璐濓細 template<class T> void to_string(string & result,const T& t) { ostringstream oss;//鍒涘緩涓涓祦 oss<<t;//鎶婂間紶閫掑嫻佷腑 result=oss.str();//鑾峰彇杞崲鍚庣殑瀛楃杞茍灝嗗叾鍐欏叆result to_string(s2,123);//int鍒皊tring to_string(s3,true);//bool鍒皊tring out_type convert(const in_value & t) { stringstream stream; stream<<t;//鍚戞祦涓紶鍊?/p>
out_type result;//榪欓噷瀛樺偍杞崲緇撴灉 stream>>result;//鍚憆esult涓啓鍏ュ?/p>
return result; } 榪欐牱浣跨敤convert()錛?/p>
double d; string salary; string s=”12.56”; d=convert<double>(s);//d絳変簬12.56 salary=convert<string>(9000.0);//salary絳変簬”9000” 鍦ㄨ繃鍘葷暀涓嬫潵鐨勭▼搴忎唬鐮佸拰綰補鐨凜紼嬪簭涓紝浼犵粺鐨?lt;stdio.h>褰㈠紡鐨勮漿鎹即闅忎簡鎴戜滑寰堥暱鐨勪竴孌墊椂闂淬備絾鏄紝濡傛枃涓墍榪幫紝鍩轟簬stringstream鐨勮漿鎹㈡嫢鏈夌被鍨嬪畨鍏ㄥ拰涓嶄細婧㈠嚭榪欐牱鎶㈢溂鐨勭壒鎬э紝浣挎垜浠湁鍏呰凍寰楃悊鐢辨姏寮?lt;stdio.h>鑰屼嬌鐢?lt;sstream>銆?lt;sstream>搴撹繕鎻愪緵浜嗗彟澶栦竴涓壒鎬?#8212;鍙墿灞曟с備綘鍙互閫氳繃閲嶈澆鏉ユ敮鎸佽嚜瀹氫箟綾誨瀷闂寸殑杞崲銆?br /> stringstream閫氬父鏄敤鏉ュ仛鏁版嵁杞崲鐨勩?/p>
鐩告瘮c搴撶殑杞崲錛屽畠鏇村姞瀹夊叏錛岃嚜鍔ㄥ拰鐩存帴銆?/p>
渚嬪瓙涓錛氬熀鏈暟鎹被鍨嬭漿鎹緥瀛?int杞瑂tring 鍑芥暟鍚? access
PFN鏄竴涓嚱鏁版寚閽?鎸囧悜char(*)(int)綾誨瀷鐨勫嚱鏁版寚閽堬紝榪欑鍑芥暟鍙傛暟鏄竴涓猧nt,榪斿洖綾誨瀷鏄竴涓猚har,濡傛灉瑕佸瀹冭祴鍊鹼紝闇瑕佸弬鏁板拰榪斿洖綾誨瀷涓鑷?br />
絎簩琛屽畾涔変簡涓涓嚱鏁癵lFun()銆傝鍑芥暟姝eソ鏄竴涓互int涓哄弬鏁拌繑鍥瀋har鐨勫嚱鏁般?/span>鎴戜滑瑕佷粠鎸囬拡鐨勫眰嬈′笂鐞嗚В鍑芥暟——鍑芥暟鐨勫嚱鏁板悕瀹為檯涓婂氨鏄竴涓寚閽堬紝鍑芥暟鍚嶆寚鍚戣鍑芥暟鐨勪唬鐮佸湪鍐呭瓨涓殑棣栧湴鍧銆?/strong>
錛堜簩錛夎祴鍊煎拰璋冪敤
璧嬪?/p>
// 璧嬪兼柟娉? 錛堝父鐢?nbsp;)
PFN = gpfn; // 鍑芥暟鐨勫嚱鏁板悕瀹為檯涓婂氨鏄竴涓寚閽堬紝鍑芥暟鍚嶆寚鍚戣鍑芥暟鐨勪唬鐮佸湪鍐呭瓨涓殑棣栧湴鍧
// 璧嬪兼柟娉?
PFN = &gpfn;
// 璋冪敤鏂規硶1
PFN(10);
// 璋冪敤鏂規硶2 ( 甯哥敤)
(*PFN)(20);
錛堜笁錛夊父瑙佺殑鍑芥暟鎸囬拡鐨勫簲鐢?br />
鏍囧噯妯℃澘搴撲腑鐨勬帓搴忓晩錛?姣旇緝鍟?閮戒細甯哥敤鐨勫嚱鏁版寚閽?br />姣斿鎴戜滑瀹氫箟浜嗙粨鏋勪綋 FightAttr璁板綍浜嗘垬鏂楃殑涓浜涙暟鎹紝姣斿榪炲嚮嬈℃暟錛?鎴樻枟寰楀垎... 鎴戜滑鍙褰曚簡姣忎釜浜虹殑FightAttr, 濡備綍瀵逛粬浠帓搴忓憿
struct FightAttr
{
Combo combo;
Score score;
....
};
鍙互鐢╯ort 絳夋帓搴?nbsp;template<class RandomAccessIterator, class Predicate>
void sort(
RandomAccessIterator first,
RandomAccessIterator last,
Predicate comp
);
// 姣旇緝榪炲嚮
bool compareCombo(const FightAttr& a, const FightAttr& b)
{
return a.combo < b.combo;
}
// 姣旇緝鍒嗘暟
bool compareScore(const FightAttr& a, const FightAttr& b)
{
return a.score< b.score;
}
鍙傝僢log:C++鎸囬拡鎺㈣ 錛堜竴錛夋暟鎹寚閽?/a>
C++鎸囬拡鎺㈣ (浜? 鍑芥暟鎸囬拡
鍚庢潵鍚屼簨璇磋繍琛屾墦鍖呯殑release鐗堟湰涔熶細鍑虹幇鍚屾牱鐨勯棶棰?..
緇忔祴璇?璋冭瘯鏃墮夋嫨"榪愯涓嶈皟璇?鎴栫洿鎺ュ弻鍑籩xe鏂囦歡鍙戠幇鎶ラ敊錛岀敱姝ゆ帹鍑篎5璋冭瘯鍜屽弻鍑葷粨鏋滀笉涓鑷?閭h繖鏍風殑鍘熷洜寰堟槑鏄句簡錛屽師鍥犱笉澶栦箮榪欏嚑鏉★細
1錛夊彉閲忔病鏈夊垵濮嬪寲灝辯洿鎺ユ嬁鍘葷敤浜嗭細璋冭瘯紼嬪簭鏃訛紝寮哄ぇ鐨刅S緙栬瘧鍣ㄤ細甯綘鍋氫竴浜涘垵濮嬪寲鐨勫伐浣滐紝灝嗕負鍒濆鍖栫殑鍙橀噺緗?#8220;0”錛岀粨鏋勫彉閲忕疆涓篘ULL絳?/strong>錛屼絾鏄湪鍙屽嚮榪愯鏃訛紝緙栬瘧鍣ㄤ笉浼氳繖涔堝仛錛屽洜姝よ娉ㄦ剰涓浜涘彉閲忚寰楀垵濮嬪寲錛岃屼笖灝介噺灝戠敤鍏ㄥ眬鍙橀噺銆?br />2錛?#8220;VS鐨勭紪璇戝櫒鏄瀬鍏剁墰X鐨勶紝璋冭瘯鏃跺欑敤鐨勫唴瀛樸佸爢鏍堢瓑絳夊拰澶栭儴榪愯鏃跺欑殑緇撴瀯紼嶆湁宸紓錛屽茍涓旀紜巼鏇撮珮——浜嬪疄涔熺‘瀹炲姝?#8221;錛屽洜姝ode浠g爜瑕佹湁涓壇濂界殑涔犳儻錛氬彉閲忚寰椾竴瀹氳鍒濆鍖栵紒“鍙橀噺娌¤祴鍊肩殑鎯呭喌涓婩5錛宒ebug鍜宺elease鏄湁宸埆鐨勶紝涓涓増鏈細娓呴浂錛屽彟涓涓笉浼氳繖涔堝仛銆?#8221;
3錛夎嚜宸辯敵璇風殑鍐呭瓨錛岀敤瀹屽悗璁板緱閲婃斁錛屼笉鐒朵篃鍙兘浼氬紩璧瘋繖綾婚敊璇?br />4錛変笉瑕佸拷瑙嗚皟璇曟椂鐨剋arning錛岃櫧鐒跺緢澶氭椂鍊欎綘鏃犺浠栫殑瀛樺湪涓嶄細甯︽潵浠涔堝獎鍝嶏紝浣嗘槸鏌愪竴澶╀綘浼氳浠栦激鍒扮殑錛屼粬浠寚紺轟綘紼嬪簭娼滃湪閿欒鐨?#8220;鍒╁櫒”錛屾墍浠ュ敖閲忓鐨勫皢warning娑堥櫎銆?br />
鎴戠殑鍘熷洜灝辨槸涓鴻鑹叉坊鍔犱簡涓涓柊鎴愬憳鍙橀噺m_bMoveEnable 鍗存病鏈夊垵濮嬪寲, 鍦╝ndroid騫沖彴鏈夋椂鍊欏垵濮嬪寲涓篺alse, 瀵艱嚧瑙掕壊鍑虹敓鏃朵笉縐誨姩榪欐牱涓ラ噸鐨凚UG
鏈変漢璇?bool鍙橀噺涓嶆槸浼氶粯璁ゅ垵濮嬪寲涓簒x涔堬紵 鏄紝鍙兘寮哄ぇ鐨刅S浼氬湪浣犺皟璇曠殑鏃跺欏府浣犲垵濮嬪寲錛岄偅榪愯鏃跺憿錛?榪樻湁璺ㄥ鉤鍙伴粯璁ょ殑鍒濆鍖栭兘鏄湭鐭ョ殑...
鎵浠ユ垜浠鍏繪垚鍒濆鍖栫殑濂戒範鎯紝鍚﹀垯鐜板湪娌℃湁鍙戠敓闂錛屾湭鏉ョ殑鏈潵錛屽彲鑳戒細瀵艱嚧涓ラ噸鐨凚UG錛岃屾氮璐規垜浠法澶х殑鏃墮棿鍘昏В鍐籌紝鐢氳嚦鏄棤浠庤В鍐?..
鍒扮洰鍓嶄負姝㈢湅璧鋒潵榪樹笉閿欍備絾鏄紝瀵逛笂闈唬鐮佺殑涓涓井灝忕殑鏀瑰彉灝變細浣跨▼搴忓穿婧冿細
int n=10000;
榪涘叆stringstream
鐢變簬n鍜?/span>s鐨勭被鍨嬪湪緙栬瘧鏈熷氨紜畾浜嗭紝鎵浠ョ紪璇戝櫒鎷ユ湁瓚沖鐨勪俊鎭潵鍒ゆ柇闇瑕佸摢浜涜漿鎹€?lt;sstream>搴撲腑澹版槑鐨勬爣鍑嗙被灝卞埄鐢ㄤ簡榪欎竴鐐癸紝鑷姩閫夋嫨鎵蹇呴渶鐨勮漿鎹€傝屼笖錛岃漿鎹㈢粨鏋滀繚瀛樺湪stringstream瀵硅薄鐨勫唴閮ㄧ紦鍐蹭腑銆備綘涓嶅繀鎷呭績緙撳啿鍖烘孩鍑猴紝鍥犱負榪欎簺瀵硅薄浼氭牴鎹渶瑕佽嚜鍔ㄥ垎閰嶅瓨鍌ㄧ┖闂淬?/span>
浣犵殑緙栬瘧鍣ㄦ敮鎸?lt;sstream>鍚楋紵
<sstream>搴撴槸鏈榪戞墠琚垪鍏++鏍囧噯鐨勩傦紙涓嶈鎶?lt;sstream>涓庢爣鍑嗗彂甯冨墠琚垹鎺夌殑<strstream>寮勬販浜嗐傦級鍥犳錛岃佷竴鐐圭殑緙栬瘧鍣紝濡侴CC2.95錛屽茍涓嶆敮鎸佸畠銆傚鏋滀綘鎭板ソ姝e湪浣跨敤榪欐牱鐨勭紪璇戝櫒鑰屽張鎯充嬌鐢?lt;sstream>鐨勮瘽錛屽氨瑕佸厛瀵瑰畠榪涜鍗囩駭鏇存柊銆?/span>
<sstream>搴撳畾涔変簡涓夌綾伙細istringstream銆乷stringstream鍜宻tringstream錛屽垎鍒敤鏉ヨ繘琛屾祦鐨勮緭鍏ャ佽緭鍑哄拰杈撳叆杈撳嚭鎿嶄綔銆傚彟澶栵紝姣忎釜綾婚兘鏈変竴涓搴旂殑瀹藉瓧絎﹂泦鐗堟湰銆傜畝鍗曡搗瑙侊紝鎴戜富瑕佷互stringstream涓轟腑蹇冿紝鍥犱負姣忎釜杞崲閮借娑夊強鍒拌緭鍏ュ拰杈撳嚭鎿嶄綔銆?/span>
娉ㄦ剰錛?lt;sstream>浣跨敤string瀵硅薄鏉ヤ唬鏇垮瓧絎︽暟緇勩傝繖鏍峰彲浠ラ伩鍏嶇紦鍐插尯婧㈠嚭鐨勫嵄闄?/strong>銆傝屼笖錛屼紶鍏ュ弬鏁板拰鐩爣瀵硅薄鐨勭被鍨嬭鑷姩鎺ㄥ鍑烘潵錛屽嵆浣夸嬌鐢ㄤ簡涓嶆紜殑鏍煎紡鍖栫涔熸病鏈夊嵄闄┿?br />
string result=”10000”;
int n=0;
stream<<result;
stream>>n;//n絳変簬10000
}
榪欐牱錛屼綘灝卞彲浠ヨ交鏉懼湴灝嗗縐嶆暟鍊艱漿鎹㈡垚瀛楃涓蹭簡錛?br />
to_string(s1,10.5);//double鍒皊tring
鍙互鏇磋繘涓姝ュ畾涔変竴涓氱敤鐨勮漿鎹㈡ā鏉匡紝鐢ㄤ簬浠繪剰綾誨瀷涔嬮棿鐨勮漿鎹€傚嚱鏁版ā鏉縞onvert()鍚湁涓や釜妯℃澘鍙傛暟out_type鍜宨n_value錛屽姛鑳芥槸灝唅n_value鍊艱漿鎹㈡垚out_type綾誨瀷錛?br />
template<class out_type,class in_value>
緇撹
涓浜涘疄渚嬶細#include <string>
#include <sstream>
#include <iostream>
int main()
{
std::stringstream stream;
std::string result;
int i = 1000;
stream << i; //灝唅nt杈撳叆嫻?/span>
stream >> result; //浠巗tream涓娊鍙栧墠闈㈡彃鍏ョ殑int鍊?/span>
std::cout << result << std::endl; // print the string "1000"
}
渚嬪瓙浜岋細闄や簡鍩烘湰綾誨瀷鐨勮漿鎹紝涔熸敮鎸乧har *鐨勮漿鎹€?/span>#include <sstream>
#include <iostream>
int main()
{
std::stringstream stream;
char result[8] ;
stream << 8888; //鍚憇tream涓彃鍏?888
stream >> result; //鎶藉彇stream涓殑鍊煎埌result
std::cout << result << std::endl; // 灞忓箷鏄劇ず "8888"
}
渚嬪瓙涓夛細鍐嶈繘琛屽嬈¤漿鎹㈢殑鏃跺欙紝蹇呴』璋冪敤stringstream鐨勬垚鍛樺嚱鏁皊tr("")#include <sstream>
#include <iostream>
int main()
{
std::stringstream stream;
int first, second;
stream<< "456"; //鎻掑叆瀛楃涓?/span>
stream >> first; //杞崲鎴恑nt
std::cout << first << std::endl;
// This copies an empty string into ss, erasing the
// previous contents.
ss << "";
// This clears the 'eof' flag. Otherwise, even after
// writing new data to ss we wouldn't be able to
// read from it.
ss.clear(); stream << true; //鎻掑叆bool鍊?/span>
stream >> second; //鎻愬彇鍑篿nt
std::cout << second << std::endl;
}
鍘熸枃鍦板潃錛?br />http://www.builder.com.cn/2003/0304/83250.shtml
http://www.shnenglu.com/alantop/archive/2007/07/10/27823.html
----------------------------------------------------------鍗庝附涓界殑鍒嗗壊綰?------------------------------------------------------------------------------
bool isExistFile(const char *pszFileName){
FILE *fp = fopen(pszFileName, "rb");
if(fp == NULL)
return false;
fclose(fp);
return true;
}
bool isExistFile(const char *pszFileName){
fstream file;
file.open(pszFileName,ios::in);
if(!file)
return false;
return true;
}
2.鍒╃敤 c 璇█鐨勫簱鐨勫姙娉曪細
// crt_access.c
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
/* Check for existence */
if( (_access( "crt_ACCESS.C", 0 )) != -1 )
{
printf( "File crt_ACCESS.C exists\n" );
/* Check for write permission */
/* assume file is read-only */
if( (_access( "crt_ACCESS.C", 2 )) == -1 )
printf( "File crt_ACCESS.C does not have write permission\n" );
}
}
3.鐢‵indFirstFile
#include <windows.h>
#include <string>
#include <vector>
using namespace std;
// 鏍告煡鐩綍錛岃嫢鐩綍涓嶅瓨鍦紝鍒涘緩鐩綍
bool FindOrCreateDirectory( const char* pszPath )
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile( pszPath, &fd );
while( hFind != INVALID_HANDLE_VALUE )
{
if ( fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
return true;
}
if ( !::CreateDirectory( pszPath, NULL ) )
{
char szDir[MAX_PATH];
sprintf_s( szDir, sizeof(szDir), "鍒涘緩鐩綍[%s]澶辮觸,璇鋒鏌ユ潈闄?/span>", pszPath );
::MessageBox( NULL, szDir, "鍒涘緩鐩綍澶辮觸", MB_OK|MB_ICONERROR );
return false;
}
return true;
}
// 閬嶅巻鐩綍
bool CheckDirectory( char* pszPath )
{
vector< std::string > vtPath;
const char* sep = "\\/";
char* next_token;
char* token = strtok_s( pszPath, sep, &next_token);
while( token != NULL )
{
vtPath.push_back( token );
token = strtok_s(NULL, sep, &next_token);
}
if ( vtPath.size() > 0 )
{
if ( vtPath[0] == "." )
vtPath.erase( vtPath.begin() );
}
// 鏍告煡鎵鏈夎礬寰勬槸鍚﹀瓨鍦?/span>
std::string strCurPath;
for( size_t i = 0; i < (int)vtPath.size(); ++i )
{
strCurPath += vtPath[i];
strCurPath += '\\';
if ( !FindOrCreateDirectory( strCurPath.c_str() ) )
{
return false;
}
}
return true;
}
int main()
{
char szPath[MAX_PATH] = "./main\\test\\hello/jump\\test\\";
CheckDirectory( szPath );
system("pause");
return 0;
}
const char* tag,
bool ignoreCase
/*TiXmlEncoding encoding */)
{
assert( p );
assert( tag );
if ( !p || !*p )
{
assert( 0 );
return false;
}
const char* q = p;
if ( ignoreCase )
{
while ( *q && *tag && tolower( *q ) == tolower( *tag ) )
{
++q;
++tag;
}
if ( *tag == 0 )
return true;
}
else
{
while ( *q && *tag && *q == *tag )
{
++q;
++tag;
}
if ( *tag == 0 ) // Have we found the end of the tag, and everything equal?
return true;
}
return false;
}
2.璇誨彇鏂囦歡
涓涓?strong>榪涚▼閫氬父瀹氫箟涓虹▼搴忕殑涓涓疄渚嬨傚湪Win32涓紝 榪涚▼鍗犳嵁4GB鐨勫湴鍧絀洪棿銆備笌瀹冧滑鍦∕S-DOS鍜?6浣峎indows鎿嶄綔緋葷粺涓笉鍚岋紝 Win32榪涚▼鏄病鏈夋椿鍔涚殑銆傝繖灝辨槸璇達紝涓涓猈in32榪涚▼騫朵笉鎵ц浠涔堟寚浠わ紝瀹冨彧鏄崰鎹潃4GB鐨勫湴鍧絀洪棿錛屾絀洪棿涓湁搴旂敤紼嬪簭EXE鏂囦歡鐨?浠g爜鍜屾暟鎹侲XE闇瑕佺殑浠繪剰DLL涔熷皢瀹冧滑鐨勪唬鐮佸拰鏁版嵁瑁呭叆鍒拌繘紼嬬殑鍦板潃絀洪棿銆傞櫎浜嗗湴鍧絀洪棿錛岃繘紼嬭繕鍗犳湁鏌愪簺璧勬簮錛屾瘮濡傛枃浠躲佸姩鎬佸唴瀛樺垎閰嶅拰綰跨▼銆傚綋榪涚▼緇堟鏃訛紝鍦ㄥ畠鐢熷懡鏈熶腑鍒涘緩鐨勫悇縐嶈祫婧愬皢琚竻闄ゃ?/p>
銆銆浣嗘槸榪涚▼鏄病鏈夋椿鍔涚殑錛屽畠鍙槸涓涓潤鎬佺殑姒傚康銆備負浜嗚榪涚▼瀹屾垚涓浜涘伐浣滐紝榪涚▼蹇呴』鑷沖皯鍗犳湁涓涓嚎紼嬶紝鎵浠ョ嚎紼嬫槸鎻忚堪榪涚▼鍐呯殑鎵ц錛屾鏄嚎紼嬭礋璐f墽琛屽寘鍚湪榪涚▼鐨勫湴鍧絀洪棿涓殑浠g爜銆傚疄闄呬笂錛屽崟涓繘紼嬪彲浠ュ寘鍚嚑涓嚎紼嬶紝 瀹冧滑鍙互鍚屾椂鎵ц榪涚▼鐨勫湴鍧絀洪棿涓殑浠g爜銆備負浜嗗仛鍒拌繖涓鐐癸紝姣忎釜綰跨▼鏈夎嚜宸辯殑涓緇凜PU瀵勫瓨鍣ㄥ拰鍫嗘爤銆?/p>
銆銆綰跨▼鏄繘紼嬪唴閮ㄧ殑涓涓墽琛屽崟鍏冦傜郴緇熷垱寤哄ソ榪涚▼鍚庯紝瀹為檯涓婂氨鍚姩鎵ц浜嗚榪涚▼鐨勪富鎵ц綰跨▼錛屼富鎵ц綰跨▼浠ュ嚱鏁板湴鍧褰㈠紡錛屾瘮濡傝main鎴朩inMain鍑芥暟錛屽皢紼嬪簭鐨勫惎鍔ㄧ偣鎻愪緵緇橶indows緋葷粺銆備富鎵ц綰跨▼緇堟浜嗭紝榪涚▼涔熷氨闅忎箣緇堟銆?/p>
銆銆姣忎竴涓繘紼嬭嚦灝戞湁涓涓富鎵ц綰跨▼錛屽畠鏃犻渶鐢辯敤鎴峰幓涓誨姩鍒涘緩錛屾槸鐢辯郴緇熻嚜鍔ㄥ垱寤虹殑銆傜敤鎴鋒牴鎹渶瑕佸湪搴旂敤紼嬪簭涓垱寤哄叾瀹冪嚎紼嬶紝澶氫釜綰跨▼騫跺彂鍦拌繍琛屼簬鍚屼竴涓繘紼嬩腑銆備竴涓繘紼嬩腑鐨勬墍鏈夌嚎紼嬮兘鍦ㄨ榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿涓紝鍏卞悓浣跨敤榪欎簺铏氭嫙鍦板潃絀洪棿銆佸叏灞鍙橀噺鍜岀郴緇熻祫婧愶紝鎵浠ョ嚎紼嬮棿鐨勯氳闈炲父鏂逛究錛屽綰跨▼鎶鏈殑搴旂敤涔熻緝涓哄箍娉涖?/p>
銆銆澶氱嚎紼嬪彲浠ュ疄鐜板茍琛屽鐞嗭紝閬垮厤浜嗘煇欏逛換鍔¢暱鏃墮棿鍗犵敤CPU鏃墮棿銆傝璇存槑鐨勪竴鐐規槸錛岀洰鍓嶅ぇ澶氭暟鐨勮綆楁満閮芥槸鍗曞鐞嗗櫒(CPU)鐨勶紝涓轟簡榪愯鎵鏈夎繖浜涚嚎紼嬶紝鎿嶄綔緋葷粺涓烘瘡涓嫭绔嬬嚎紼嬪畨鎺掍竴浜汣PU鏃墮棿錛屾搷浣滅郴緇熶互杞崲鏂瑰紡鍚戠嚎紼嬫彁渚涙椂闂寸墖錛岃繖灝辯粰浜轟竴縐嶅亣璞★紝濂借薄榪欎簺綰跨▼閮藉湪鍚屾椂榪愯銆傜敱姝ゅ彲瑙侊紝濡傛灉涓や釜闈炲父媧昏穬鐨勭嚎紼嬩負浜嗘姠澶哄CPU鐨勬帶鍒舵潈錛屽湪綰跨▼鍒囨崲鏃朵細娑堣楀緢澶氱殑CPU璧勬簮錛屽弽鑰屼細闄嶄綆緋葷粺鐨勬ц兘銆傝繖涓鐐瑰湪澶氱嚎紼嬬紪紼嬫椂搴旇娉ㄦ剰銆?/p>
銆銆鐜頒唬鎿嶄綔緋葷粺澶ч兘鎻愪緵浜嗙浉搴旂殑鏈哄埗錛岀敤鏉ュ鐞嗙嚎紼嬬殑鐢熷瓨鏈熴佸悓姝ワ紝浠ュ強鍏朵粬“鍜岀嚎紼嬫湁鍏?#8221;鐨勫睘鎬э紝濡備紭鍏堢駭銆佺嚎紼嬩笓鏈夊瓨鍌ㄧ┖闂?thread-specific storage)絳夈傚綰跨▼緙栫▼鏄竴闂ㄨ璦鐨勯毦鐐瑰拰閲嶇偣
娓告垙涓帴鍙楀埌鐨勬秷鎭偅鍙竴涓濡傜墰姣涘晩錛岃繖灝辨秹鍙婂埌switch case鎺ュ彈榪樻槸if else鎺ュ彈鐨勬晥鐜囬棶棰?br>鏈変漢璇磋繖鏄釜灝忛棶棰橈紝鍝堝搱 綺劇泭姹傜簿鍚?br>
鐪嬪埌浜嗕竴綃囦袱鑰呮晥鐜囨瘮杈冪殑鏂囩珷錛?br>
switch...case涓巌f...else鐨勬牴鏈尯鍒湪浜庯紝switch...case浼氱敓鎴愪竴涓煩杞〃鏉ユ寚紺哄疄闄呯殑case鍒嗘敮鐨勫湴鍧錛岃岃繖涓煩杞〃鐨勭儲寮曞彿涓巗witch鍙橀噺鐨勫兼槸鐩哥瓑鐨勩備粠鑰岋紝switch...case涓嶇敤鍍廼f...else閭f牱閬嶅巻鏉′歡鍒嗘敮鐩村埌鍛戒腑鏉′歡錛岃屽彧闇璁塊棶瀵瑰簲绱㈠紩鍙風殑琛ㄩ」浠庤屽埌杈懼畾浣嶅垎鏀殑鐩殑銆?/p>
鍏蜂綋鍦拌錛宻witch...case浼氱敓鎴愪竴浠藉ぇ灝忥紙琛ㄩ」鏁幫級涓烘渶澶ase甯擱噺錛?鐨勮煩琛紝紼嬪簭棣栧厛鍒ゆ柇switch鍙橀噺鏄惁澶т簬鏈澶ase甯擱噺錛岃嫢澶т簬錛屽垯璺沖埌default鍒嗘敮澶勭悊錛涘惁鍒欏彇寰楃儲寮曞彿涓簊witch鍙橀噺澶у皬鐨勮煩琛ㄩ」鐨勫湴鍧錛堝嵆璺寵〃鐨勮搗濮嬪湴鍧錛嬭〃欏瑰ぇ灝忥紛绱㈠紩鍙鳳級錛岀▼搴忔帴鐫璺沖埌姝ゅ湴鍧鎵ц錛屽埌姝ゅ畬鎴愪簡鍒嗘敮鐨勮煩杞傚涓嬩唬鐮侊紙gcc緙栬瘧錛屼笉寮浼樺寲錛夛細
int main()
{
int j = 0;
int i = 1;
switch (i)
{
case 1:
j = 11;
break;
case 2:
j = 22;
break;
case 3:
j = 33;
break;
case 4:
j = 44;
break;
case 10:
j = 10;
default:
j = 88;
break;
}
return 0;
}
榪欐槸緙栬瘧鍚庣殑閮ㄥ垎姹囩紪鐮侊細
.file "test.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $16, %esp
movl $0, -8(%ebp)
movl $1, -12(%ebp)
cmpl $10, -12(%ebp)
ja .L2
movl -12(%ebp), %eax
sall $2, %eax
movl .L8(%eax), %eax
jmp *%eax
.section .rodata
.align 4
.align 4
.L8:
.long .L2
.long .L3
.long .L4
.long .L5
.long .L6
.long .L2
.long .L2
.long .L2
.long .L2
.long .L2
.long .L7
.text
.L3:
movl $11, -8(%ebp)
jmp .L9
.L4:
movl $22, -8(%ebp)
jmp .L9
.L5:
movl $33, -8(%ebp)
jmp .L9
.L6:
movl $44, -8(%ebp)
jmp .L9
.L7:
movl $10, -8(%ebp)
.L2:
movl $88, -8(%ebp)
.L9:
movl $0, %eax
addl $16, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
鍙互鎵撲釜姣旀柟錛宻witch...case璁塊棶鏉′歡鍒嗘敮鐨勬柟寮忓儚鏁扮粍涓鏍鳳紝鏄殢鏈鴻闂紱鑰宨f...else鏄『搴忚闂?/p>
浠栦滑鍚勮嚜鐨勭壒鐐癸細
1銆?鎬諱綋涓婅錛宻witch...case 鏁堢巼瑕侀珮浜庡悓鏍鋒潯浠朵笅鐨刬f...else錛岀壒鍒槸褰撴潯浠跺垎鏀緝澶氭椂銆?/p>
2銆乻witch...case鍗犵敤杈冨鐨勪唬鐮佺┖闂達紝鍥犱負瀹冭鐢熸垚璺寵〃錛岀壒鍒槸褰揷ase甯擱噺鍒嗗竷鑼冨洿寰堝ぇ浣嗗疄闄呮湁鏁堝煎張姣旇緝灝戠殑鎯呭喌錛宻witch...case鐨勭┖闂村埄鐢ㄧ巼灝嗗彉寰楀緢浣庛備緥濡備笂闈㈢殑浠g爜錛屽鏋滄妸case 10鏀規垚case 100錛屽垯浼氱敓鎴?01涓〃欏癸紝鑰屽ぇ閮ㄥ垎琛ㄩ」鏄寚鍚戝悓涓鍒嗘敮(default鍒嗘敮)銆俿witch...case鏄湪浠ョ┖闂存崲鏃墮棿銆?/p>
3銆乻witch...case鍙兘澶勭悊case涓哄父閲忕殑鎯呭喌錛屽闈炲父閲忕殑鎯呭喌鏄棤鑳戒負鍔涚殑銆備緥濡?if (a > 1 && a < 100)錛屾槸鏃犳硶浣跨敤switch...case鏉ュ鐞嗙殑銆?/p>
錛婏紛錛婃敞鎰忥細濡傛灉鎶婁緥瀛愪腑鐨刢ase鍒嗘敮鍑忓皯涓涓紝鍒欑敓鎴愮殑姹囩紪鐮佷笌if...else宸埆涓嶅ぇ錛屾鏃朵笉浼氱敓鎴愯煩琛ㄩ」錛屽彲瑙佸浜庡垎鏀緝灝戠殑鎯呭喌錛岀紪璇戝櫒浼氬仛鐗規畩澶勭悊銆?br>
鍘熸枃鍦板潃錛?a >http://blog.csdn.net/kevinyujm/archive/2009/02/18/3907964.aspx
鍦≒entium浠ヤ笂鐨凜PU涓紝鎻愪緵浜嗕竴鏉℃満鍣ㄦ寚浠DTSC錛圧ead Time Stamp Counter錛夋潵璇誨彇榪欎釜鏃墮棿鎴崇殑鏁板瓧錛屽茍灝嗗叾淇濆瓨鍦‥DX:EAX瀵勫瓨鍣ㄥ涓傜敱浜嶦DX:EAX瀵勫瓨鍣ㄥ鎭板ソ鏄疻in32騫沖彴涓婥++璇█淇濆瓨鍑芥暟榪斿洖鍊肩殑瀵勫瓨鍣紝鎵浠ユ垜浠彲浠ユ妸榪欐潯鎸囦護鐪嬫垚鏄竴涓櫘閫氱殑鍑芥暟璋冪敤銆倂c2003鍍忚繖鏍鳳細
inline unsigned __int64 GetTimeStampCount()
{
__asm RDTSC
}
瀵逛簬vc6鎴栬呭叾浠栫紪璇戝櫒鍙兘涓嶈錛屽洜涓篟DTSC涓嶈C++鐨勫唴宓屾眹緙栧櫒鐩存帴鏀寔錛屾墍浠ユ垜浠鐢╛emit浼寚浠ょ洿鎺ュ祵鍏ヨ鎸囦護鐨勬満鍣ㄧ爜褰㈠紡0X0F銆?X31錛屽涓嬶細
inline unsigned __int64 GetTimeStampCount()
{
__asm _emit 0x0F
__asm _emit 0x31
}
瀵瑰叧娉ㄦц兘鐨勭▼搴忓紑鍙戜漢鍛樿岃█錛屼竴涓ソ鐨勮鏃墮儴浠舵棦鏄泭鍙嬶紝涔熸槸鑹笀銆傝鏃跺櫒鏃㈠彲浠ヤ綔涓虹▼搴忕粍浠跺府鍔╃▼搴忓憳綺劇‘鐨勬帶鍒剁▼搴忚繘紼嬶紝鍙堟槸涓浠舵湁鍔涚殑璋冭瘯姝﹀櫒錛屽湪鏈夌粡楠岀殑紼嬪簭鍛樻墜閲屽彲浠ュ敖蹇殑紜畾紼嬪簭鐨勬ц兘鐡墮錛屾垨鑰呭涓嶅悓鐨勭畻娉曚綔鍑烘湁璇存湇鍔涚殑鎬ц兘姣旇緝銆?nbsp;
銆銆鍦╓indows騫沖彴涓嬶紝甯哥敤鐨勮鏃跺櫒鏈変袱縐嶏紝涓縐嶆槸timeGetTime澶氬獟浣撹鏃跺櫒錛屽畠鍙互鎻愪緵姣綰х殑璁℃椂銆備絾榪欎釜綺懼害瀵瑰緢澶氬簲鐢ㄥ満鍚堣岃█榪樻槸澶矖緋欎簡銆傚彟涓縐嶆槸QueryPerformanceCount璁℃暟鍣紝闅忕郴緇熺殑涓嶅悓鍙互鎻愪緵寰綰х殑璁℃暟銆傚浜庡疄鏃跺浘褰㈠鐞嗐佸濯掍綋鏁版嵁嫻佸鐞嗐佹垨鑰呭疄鏃剁郴緇熸瀯閫犵殑紼嬪簭鍛橈紝鍠勭敤QueryPerformanceCount/QueryPerformanceFrequency鏄竴欏瑰熀鏈姛銆?nbsp;
銆銆鏈枃瑕佷粙緇嶇殑錛屾槸鍙︿竴縐嶇洿鎺ュ埄鐢≒entium CPU鍐呴儴鏃墮棿鎴寵繘琛岃鏃剁殑楂樼簿搴﹁鏃舵墜孌點備互涓嬭璁轟富瑕佸緱鐩婁簬銆奧indows鍥懼艦緙栫▼銆嬩竴涔︼紝絎?nbsp; 15欏碉紞17欏碉紝鏈夊叴瓚g殑璇昏呭彲浠ョ洿鎺ュ弬鑰冭涔︺傚叧浜嶳DTSC鎸囦護鐨勮緇嗚璁猴紝鍙互鍙傝僆ntel浜у搧鎵嬪唽銆傛湰鏂囦粎浠呬綔鎶涚爾涔嬬敤銆?nbsp;
銆銆鍦?nbsp; Intel Pentium浠ヤ笂綰у埆鐨凜PU涓紝鏈変竴涓О涓?#8220;鏃墮棿鎴籌紙Time Stamp錛?#8221;鐨勯儴浠訛紝瀹冧互64浣嶆棤絎﹀彿鏁村瀷鏁扮殑鏍煎紡錛岃褰曚簡鑷狢PU涓婄數浠ユ潵鎵緇忚繃鐨勬椂閽熷懆鏈熸暟銆傜敱浜庣洰鍓嶇殑CPU涓婚閮介潪甯擱珮錛屽洜姝よ繖涓儴浠跺彲浠ヨ揪鍒扮撼縐掔駭鐨勮鏃剁簿搴︺傝繖涓簿紜ф槸涓婅堪涓ょ鏂規硶鎵鏃犳硶姣旀嫙鐨勩?nbsp;
銆銆鍦≒entium浠ヤ笂鐨凜PU涓紝鎻愪緵浜嗕竴鏉℃満鍣ㄦ寚浠DTSC錛圧ead Time Stamp Counter錛夋潵璇誨彇榪欎釜鏃墮棿鎴崇殑鏁板瓧錛屽茍灝嗗叾淇濆瓨鍦‥DX:EAX瀵勫瓨鍣ㄥ涓傜敱浜嶦DX:EAX瀵勫瓨鍣ㄥ鎭板ソ鏄疻in32騫沖彴涓婥++璇█淇濆瓨鍑芥暟榪斿洖鍊肩殑瀵勫瓨鍣紝鎵浠ユ垜浠彲浠ユ妸榪欐潯鎸囦護鐪嬫垚鏄竴涓櫘閫氱殑鍑芥暟璋冪敤銆傚儚榪欐牱錛?nbsp;
inline unsigned __int64 GetCycleCount()
{
__asm RDTSC
}
浣嗘槸涓嶈錛屽洜涓篟DTSC涓嶈C++鐨勫唴宓屾眹緙栧櫒鐩存帴鏀寔錛屾墍浠ユ垜浠鐢╛emit浼寚浠ょ洿鎺ュ祵鍏ヨ鎸囦護鐨勬満鍣ㄧ爜褰㈠紡0X0F銆?X31錛屽涓嬶細
inline unsigned __int64 GetCycleCount()
{
__asm _emit 0x0F
__asm _emit 0x31
}
浠ュ悗鍦ㄩ渶瑕佽鏁板櫒鐨勫満鍚堬紝鍙互鍍忎嬌鐢ㄦ櫘閫氱殑Win32 API涓鏍鳳紝璋冪敤涓ゆGetCycleCount鍑芥暟錛屾瘮杈冧袱涓繑鍥炲肩殑宸紝鍍忚繖鏍鳳細
unsigned long t;
t = (unsigned long)GetCycleCount();
//Do Something time-intensive ...
t -= (unsigned long)GetCycleCount();
銆銆銆奧indows鍥懼艦緙栫▼銆嬬15欏電紪鍐欎簡涓涓被錛屾妸榪欎釜璁℃暟鍣ㄥ皝瑁呰搗鏉ャ傛湁鍏磋叮鐨勮鑰呭彲浠ュ幓鍙傝冮偅涓被鐨勪唬鐮併備綔鑰呬負浜嗘洿綺劇‘鐨勫畾鏃訛紝鍋氫簡涓鐐瑰皬灝忕殑鏀硅繘錛屾妸鎵цRDTSC鎸囦護鐨勬椂闂達紝閫氳繃榪炵畫涓ゆ璋冪敤GetCycleCount鍑芥暟璁$畻鍑烘潵騫朵繚瀛樹簡璧鋒潵錛屼互鍚庢瘡嬈¤鏃剁粨鏉熷悗錛岄兘浠庡疄闄呭緱鍒扮殑璁℃暟涓噺鎺夎繖涓灝忔鏃墮棿錛屼互寰楀埌鏇村噯紜殑璁℃椂鏁板瓧銆備絾鎴戜釜浜鴻寰楄繖涓鐐圭偣鏀硅繘鎰忎箟涓嶅ぇ銆傚湪鎴戠殑鏈哄櫒涓婂疄嫻嬶紝榪欐潯鎸囦護澶ф鑺辨帀浜嗗嚑鍗佸埌100澶氫釜鍛ㄦ湡錛屽湪 Celeron 800MHz鐨勬満鍣ㄤ笂錛岃繖涓嶈繃鏄崄鍒嗕箣涓寰鐨勬椂闂淬傚澶у鏁板簲鐢ㄦ潵璇達紝榪欑偣鏃墮棿瀹屽叏鍙互蹇界暐涓嶈錛涜屽閭d簺紜疄瑕佺簿紜埌綰崇鏁伴噺綰х殑搴旂敤鏉ヨ錛岃繖涓ˉ鍋夸篃榪囦簬綺楃硻浜嗐?nbsp;
榪欎釜鏂規硶鐨勪紭鐐規槸錛?nbsp;
1.楂樼簿搴︺傚彲浠ョ洿鎺ヨ揪鍒扮撼縐掔駭鐨勮鏃剁簿搴︼紙鍦?GHz鐨凜PU涓婃瘡涓椂閽熷懆鏈熷氨鏄竴綰崇錛夛紝榪欐槸鍏朵粬璁℃椂鏂規硶鎵闅句互浼佸強鐨勩?nbsp;
2. 鎴愭湰浣庛倀imeGetTime 鍑芥暟闇瑕侀摼鎺ュ濯掍綋搴搘inmm.lib錛孮ueryPerformance* 鍑芥暟鏍規嵁MSDN鐨勮鏄庯紝闇瑕佺‖浠剁殑鏀寔錛堣櫧鐒舵垜榪樻病鏈夎榪囦笉鏀寔鐨勬満鍣級鍜孠ERNEL搴撶殑鏀寔錛屾墍浠ヤ簩鑰呴兘鍙兘鍦╓indows騫沖彴涓嬩嬌鐢紙鍏充簬DOS騫沖彴涓嬬殑楂樼簿搴﹁鏃墮棶棰橈紝鍙互鍙傝冦婂浘褰㈢▼搴忓紑鍙戜漢鍛樻寚鍗椼嬶紝閲岄潰鏈夊叧浜庢帶鍒跺畾鏃跺櫒8253鐨勮緇嗚鏄庯級銆備絾RDTSC鎸囦護鏄竴鏉PU鎸囦護錛屽嚒鏄痠386騫沖彴涓婸entium浠ヤ笂鐨勬満鍣ㄥ潎鏀寔錛岀敋鑷蟲病鏈夊鉤鍙扮殑闄愬埗錛堟垜鐩鎬俊i386鐗堟湰UNIX鍜孡inux涓嬭繖涓柟娉曞悓鏍烽傜敤錛屼絾娌℃湁鏉′歡璇曢獙錛夛紝鑰屼笖鍑芥暟璋冪敤鐨勫紑閿鏄渶灝忕殑銆?nbsp;
3. 鍏鋒湁鍜孋PU涓婚鐩存帴瀵瑰簲鐨勯熺巼鍏崇郴銆備竴涓鏁扮浉褰撲簬1/(CPU涓婚Hz鏁?縐掞紝榪欐牱鍙鐭ラ亾浜咰PU鐨勪富棰戯紝鍙互鐩存帴璁$畻鍑烘椂闂淬傝繖鍜?nbsp; QueryPerformanceCount涓嶅悓錛屽悗鑰呴渶瑕侀氳繃QueryPerformanceFrequency鑾峰彇褰撳墠璁℃暟鍣ㄦ瘡縐掔殑璁℃暟嬈℃暟鎵嶈兘鎹㈢畻鎴愭椂闂淬?nbsp;
榪欎釜鏂規硶鐨勭己鐐規槸錛?nbsp;
1.鐜版湁鐨凜/C++緙栬瘧鍣ㄥ鏁頒笉鐩存帴鏀寔浣跨敤RDTSC鎸囦護錛岄渶瑕佺敤鐩存帴宓屽叆鏈哄櫒鐮佺殑鏂瑰紡緙栫▼錛屾瘮杈冮夯鐑︺?nbsp;
2.鏁版嵁鎶栧姩姣旇緝鍘夊銆傚叾瀹炲浠諱綍璁¢噺鎵嬫鑰岃█錛岀簿搴﹀拰紼沖畾鎬ф案榪滄槸涓瀵圭煕鐩俱傚鏋滅敤浣庣簿搴︾殑timeGetTime鏉ヨ鏃訛紝鍩烘湰涓婃瘡嬈¤鏃剁殑緇撴灉閮芥槸鐩稿悓鐨勶紱鑰孯DTSC鎸囦護姣忔緇撴灉閮戒笉涓鏍鳳紝緇忓父鏈夊嚑鐧劇敋鑷充笂鍗冪殑宸窛銆傝繖鏄繖縐嶆柟娉曢珮綺懼害鏈韓鍥烘湁鐨勭煕鐩俱?nbsp;
鍏充簬榪欎釜鏂規硶璁℃椂鐨勬渶澶ч暱搴︼紝鎴戜滑鍙互綆鍗曠殑鐢ㄤ笅鍒楀叕寮忚綆楋細
鑷狢PU涓婄數浠ユ潵鐨勭鏁?nbsp; = RDTSC璇誨嚭鐨勫懆鏈熸暟 / CPU涓婚閫熺巼錛圚z錛?nbsp;
64浣嶆棤絎﹀彿鏁存暟鎵鑳借〃杈劇殑鏈澶ф暟瀛楁槸1.8×10^19錛屽湪鎴戠殑Celeron 800涓婂彲浠ヨ鏃跺ぇ綰?00騫達紙涔︿腑璇村彲浠ュ湪200MHz鐨凱entium涓婅鏃?17騫達紝榪欎釜鏁板瓧涓嶇煡閬撴槸鎬庝箞寰楀嚭鏉ョ殑錛屼笌鎴戠殑璁$畻鏈夊嚭鍏ワ級銆傛棤璁哄浣曪紝鎴戜滑澶у彲涓嶅繀鍏沖績婧㈠嚭鐨勯棶棰樸?nbsp;
涓嬮潰鏄嚑涓皬渚嬪瓙錛岀畝瑕佹瘮杈冧簡涓夌璁℃椂鏂規硶鐨勭敤娉曚笌綺懼害
//Timer1.cpp 浣跨敤浜哛DTSC鎸囦護鐨凾imer綾?/KTimer綾葷殑瀹氫箟鍙互鍙傝銆奧indows鍥懼艦緙栫▼銆婸15
//緙栬瘧琛岋細CL Timer1.cpp /link USER32.lib
#include <stdio.h>
#include "KTimer.h"
main()
{
unsigned t;
KTimer timer;
timer.Start();
Sleep(1000);
t = timer.Stop();
printf("Lasting Time: %d\n",t);
}
//Timer2.cpp 浣跨敤浜唗imeGetTime鍑芥暟
//闇鍖呭惈<mmsys.h>錛屼絾鐢變簬Windows澶存枃浠墮敊緇煎鏉傜殑鍏崇郴
//綆鍗曞寘鍚?amp;ltwindows.h>姣旇緝鍋鋒噿錛氾級
//緙栬瘧琛岋細CL timer2.cpp /link winmm.lib
#include <windows.h>
#include <stdio.h>
main()
{
DWORD t1, t2;
t1 = timeGetTime();
Sleep(1000);
t2 = timeGetTime();
printf("Begin Time: %u\n", t1);
printf("End Time: %u\n", t2);
printf("Lasting Time: %u\n",(t2-t1));
}
//Timer3.cpp 浣跨敤浜哘ueryPerformanceCounter鍑芥暟
//緙栬瘧琛岋細CL timer3.cpp /link KERNEl32.lib
#include <windows.h>
#include <stdio.h>
main()
{
LARGE_INTEGER t1, t2, tc;
QueryPerformanceFrequency(&tc);
printf("Frequency: %u\n", tc.QuadPart);
QueryPerformanceCounter(&t1);
Sleep(1000);
QueryPerformanceCounter(&t2);
printf("Begin Time: %u\n", t1.QuadPart);
printf("End Time: %u\n", t2.QuadPart);
printf("Lasting Time: %u\n",( t2.QuadPart- t1.QuadPart));
}
////////////////////////////////////////////////
//浠ヤ笂涓変釜紺轟緥紼嬪簭閮芥槸嫻嬭瘯1縐掗挓浼戠湢鎵鑰楄垂鐨勬椂闂?nbsp;
file://嫻?璇曠幆澧冿細Celeron 800MHz / 256M SDRAM
// Windows 2000 Professional SP2
// Microsoft Visual C++ 6.0 SP5
////////////////////////////////////////////////
浠ヤ笅鏄疶imer1鐨勮繍琛岀粨鏋滐紝浣跨敤鐨勬槸楂樼簿搴︾殑RDTSC鎸囦護
Lasting Time: 804586872
浠ヤ笅鏄疶imer2鐨勮繍琛岀粨鏋滐紝浣跨敤鐨勬槸鏈綺楃硻鐨則imeGetTime API
Begin Time: 20254254
End Time: 20255255
Lasting Time: 1001
浠ヤ笅鏄疶imer3鐨勮繍琛岀粨鏋滐紝浣跨敤鐨勬槸QueryPerformanceCount API
Frequency: 3579545
Begin Time: 3804729124
End Time: 3808298836
Lasting Time: 3569712
嬈㈣繋鏀惰棌鏈枃 涓璧瘋緗?銆愯幏鍙朇PU鏃墮棿鎴充唬鐮?浣跨敤CPU鏃墮棿鎴寵繘琛岄珮綺懼害璁℃椂 http://www.1qidu.com/?action-viewnews-itemid-16841銆?br>涓璧瘋緗戝弬鑰冨湴鍧錛?a style="COLOR: navy; TEXT-DECORATION: none" >http://www.1qidu.com/?action-viewnews-itemid-16841
鍘熸枃鍦板潃錛?a href="http://www.shnenglu.com/gcs8cn/archive/2010/06/09/117469.aspx">http://www.shnenglu.com/gcs8cn/archive/2010/06/09/117469.aspx
闂鎻忚堪錛氬湪 VC 6.0涓嬌鐢╯ocket鐩稿叧鐨勫嚱鏁版椂娌℃湁浠涔堥棶棰橈紝鍙槸鍒頒簡.net涓嬪氨鏈変互涓嬬被浼肩殑閿欒錛?
[C++ Error] winsock2.h(109): E2238 Multiple declaration
for 'fd_set'
[C++ Error] winsock.h(54): E2344 Earlier declaration of 'fd_set' [C++ Error] winsock2.h(112): E2146 Need an identifier to declare [C++ Warning] winsock2.h(144): W8017 Redefinition of 'FD_SET' is not identical [C++ Error] winsock2.h(153): E2238 Multiple declaration for 'timeval' [C++ Error] winsock.h(97): E2344 Earlier declaration of 'timeval' [C++ Error] winsock2.h(209): E2238 Multiple declaration for 'hostent' [C++ Error] winsock.h(153): E2344 Earlier declaration of 'hostent' [C++ Error] winsock2.h(222): E2238 Multiple declaration for 'netent' [C++ Error] winsock.h(166): E2344 Earlier declaration of 'netent' [C++ Error] winsock2.h(229): E2238 Multiple declaration for 'servent' [C++ Error] winsock.h(173): E2344 Earlier declaration of 'servent' [C++ Error] winsock2.h(241): E2238 Multiple declaration for 'protoent' [C++ Error] winsock.h(185): E2344 Earlier declaration of 'protoent' [C++ Error] winsock2.h(327): E2238 Multiple declaration for 'in_addr' [C++ Error] winsock.h(269): E2344 Earlier declaration of 'in_addr' [C++ Error] winsock2.h(385): E2238 Multiple declaration for 'sockaddr_in' [C++ Error] winsock.h(319): E2344 Earlier declaration of 'sockaddr_in' [C++ Error] winsock2.h(395): E2238 Multiple declaration for 'WSAData' [C++ Error] winsock.h(329): E2344 Earlier declaration of 'WSAData' [C++ Error] winsock2.h(411): E2146 Need an identifier to declare [C++ Warning] winsock2.h(455): W8017 Redefinition of 'SO_DONTLINGER' is not identical [C++ Warning] winsock2.h(512): W8017 Redefinition of 'AF_IPX' is not identical [C++ Warning] winsock2.h(540): W8017 Redefinition of 'AF_MAX' is not identical [C++ Error] winsock2.h(546): E2238 Multiple declaration for 'sockaddr' [C++ Error] winsock.h(492): E2344 Earlier declaration of 'sockaddr' [C++ Error] winsock2.h(586): E2238 Multiple declaration for 'sockproto' [C++ Error] winsock.h(501): E2344 Earlier declaration of 'sockproto' [C++ Error] winsock2.h(625): E2238 Multiple declaration for 'linger' [C++ Error] winsock2.h(625): E2228 Too many error or warning messages Solution錛?/font> This problem arises because winsock2.h but winsock2.h they chose neither to change winsock2.h, which replaces windows.h from winsock2.h standalone). The fix is thankfully simple: always "before windows.h has been included by (for example) a higher-level header file that is subsequently including your header file, it's too late - so you must make sure that the higher-level header files respect this convention also. It is however rarely necessary to modify the header files of libraries or other code modules you are using just because you include their header files, and their header files include winsock2.h before you include the library's header files. 鍦ㄥ寘鍚玧rtplib鏈夋椂鍊欐垜涔熼亣鍒拌繖涓棶棰橈紝瑙e喅鏂規硶涓庝箣鐩稿悓銆備竴鍙ヨ瘽錛屽湪#include<windows.h>涔嬪墠 #include <winsock2.h> 闂灝卞彲浠ヨВ鍐熾?br> 闂鎻忚堪] |
絎竴縐嶆柟娉曪細浣庣簿搴︼紝GetTickCount()鍑芥暟鐨勭簿搴﹀彧鏈?0ms錛屾墍浠ュ鏋滅▼搴忔墽琛屾椂闂村皬浜?0ms錛屼笉鑳戒嬌鐢ㄨ鍑芥暟
DWORD Milliseconds_Parser_Start;
DWORD Milliseconds_Parser_End;
Milliseconds_Parser_Start = ::GetTickCount();
// 寰呮祴璇曚唬鐮佹
Milliseconds_Parser_End = ::GetTickCount();
TCHAR debugStr[256];
_stprintf(szDebug, "item: %d milin sec \n",Milliseconds_Parser_End - Milliseconds_Parser_Start);
OutputDebugString(debugStr);
絎簩縐嶆柟娉曪細楂樼簿搴?br>LARGE_INTEGER t_freqency;
QueryPerformanceFrequency(&t_freqency);
float f_countDiff2Milisecond = float(1000.0/t_freqency.QuadPart);
LARGE_INTEGER start;
LARGE_INTEGER end;
QueryPerformanceCounter(&start);
// 寰呮祴璇曚唬鐮佹
QueryPerformanceCounter(&end);
TCHAR debugStr[256];
_stprintf(debugStr, _T("item: %f milin sec \n"),(end.QuadPart - start.QuadPart) * f_countDiff2Milisecond );
OutputDebugString(debugStr);
CSDN鍗氬錛?a >http://blog.csdn.net/rabbit729/archive/2010/05/22/5616976.aspx