@chaogu
Linux 下呢?有沒(méi)有 busy waiting?
@chaogu
我沒(méi)有遇到過(guò),你的線(xiàn)程函數(shù)長(zhǎng)什么樣?用哪種同步機(jī)制?
1. 既然對(duì)象肯定要用到而且會(huì)在main()里邊析構(gòu),那么用一個(gè)全局的指針不就行了?在main()里邊構(gòu)造一個(gè)局部對(duì)象,把全局指針指向它。完全不必用宏,也不必手動(dòng)釋放對(duì)象。
2. 為了防止在別處意外構(gòu)造對(duì)象,把構(gòu)造函數(shù)的參數(shù)定為 enum YouShouldNotConstructTheObjectUnlessInMain,這樣一搜源代碼就知道有沒(méi)有人故意誤用。
3. 為什么要默認(rèn)使用虛析構(gòu)?既然構(gòu)造函數(shù)是private的,說(shuō)明根本不可能創(chuàng)建派生類(lèi)的對(duì)象,虛析構(gòu)意義何在?
@dennis-zhuang
> 不支持udp是基于什么考慮?
因?yàn)槲覜](méi)搞過(guò) UDP 編程,沒(méi)有一手的經(jīng)驗(yàn)。
> timerQueue替換成優(yōu)先隊(duì)列也是O(lg(n))的復(fù)雜度吧,而不是O(1)
刪除的復(fù)雜度是 O(ln n)。插入的平均復(fù)雜度是 O(1),最壞復(fù)雜度是 O(ln n)。已訂正原文,多謝。
> 貌似沒(méi)有實(shí)現(xiàn)基于select的Poller。
確實(shí),因?yàn)?select 比 poll 限制更多,有了 poll 和 epoll,沒(méi)必要再實(shí)現(xiàn) select。
> 代碼很清晰,感謝。
thanks.
@路青飛
因?yàn)槲覍?duì) Windows 編程不熟。
@kk
用 snprintf 是為了避免在堆上分配內(nèi)存,ostringstream 則正好相反;在多線(xiàn)程程序里,內(nèi)存分配可能會(huì)加鎖,用棧上的緩沖區(qū)能避免無(wú)謂的加鎖。
用 fprintf 是因?yàn)樗蔷€(xiàn)程安全的,cout/cerr 則相反。cerr << a << b; 是兩次函數(shù)調(diào)用,中間可能會(huì)被打斷進(jìn)行上下文切換,造成輸出內(nèi)容不連續(xù),插入了其他字符。而 fprintf(stderr, "%s %d", a, b); 是一次函數(shù)調(diào)用,而且是線(xiàn)程安全的,打印的內(nèi)容不會(huì)受其他線(xiàn)程影響。
另外我沒(méi)有見(jiàn)過(guò)誰(shuí)在產(chǎn)品代碼里用 iostream。
目前 Google 公開(kāi)的大量 C++ 代碼都遵循了這份規(guī)范。
這些公開(kāi)的代碼的質(zhì)量都很高,值得借鑒。
@欲三更
這正好證明了我的觀點(diǎn),如果標(biāo)準(zhǔn)庫(kù)里沒(méi)有,每個(gè)第三方 library 都會(huì)自己造一套。
std::string 加入標(biāo)準(zhǔn)大約是在 1994 年,然后又被 STL 拖延,到 1998 年標(biāo)準(zhǔn)才發(fā)布。
而 QT, ACE, MFC 的開(kāi)發(fā)均早于 std::string。
QT 是 1991 年開(kāi)始開(kāi)發(fā),MFC 最早在 1992 年發(fā)布,1993 年 ACE 的版本號(hào)已經(jīng)升到了 2.12。
假如 C++ 在 1985 年提供 string,還會(huì)造成這樣天下大亂的局面嗎?
@OwnWaterloo
已在正文中答復(fù)。
@coder
在我的 Ubuntu 9.10 + Evince Document Viewer 2.28.1 下看沒(méi)有問(wèn)題。
請(qǐng)你用的哪個(gè) Linux 發(fā)行版?什么版本的 PDF 閱讀器?