re: 防止程序多開的方法 楊粼波 2011-03-29 10:28
windows系統(tǒng)下,程序防止多開的幾種常見方法:
1)使用FindWindow API函數(shù)。
通過(guò)查找窗口標(biāo)題(或/和類名)來(lái)判斷程序是否正在運(yùn)行。如果找到了,表明程序正在運(yùn)行,這時(shí)可退出程序,達(dá)到不重復(fù)運(yùn)行的效果;反之表明程序是第一次運(yùn)行。
這種方法不適用于以下情況,程序的標(biāo)題是動(dòng)態(tài)變化的、系統(tǒng)中運(yùn)行了相同標(biāo)題(或/和類名)的程序
2)Mutex/Event/Semaphore
通過(guò)互斥對(duì)象/信號(hào)量/事件等線程同步對(duì)象來(lái)確定程序是否已經(jīng)運(yùn)行。最常用的函數(shù)如:CreateMutexA(注意:QQ堂、QQ游戲大廳就是采用這樣方法來(lái)限制程序多開的)
3)內(nèi)存映射文件(File Mapping)
通過(guò)把程序?qū)嵗畔⒎诺娇邕M(jìn)程的內(nèi)存映射文件中,也可以控制程序多開。
4)DLL全局共享區(qū)
DLL全局共享區(qū)在映射到各個(gè)進(jìn)程的地址空間時(shí)僅被初始化一次,且是在第一次被windows加載時(shí),所以利用該區(qū)數(shù)據(jù)就能對(duì)程序進(jìn)行多開限制。
5)全局Atom
將某個(gè)特定字符串通過(guò)GlobalAddAtom加入全局原子表(Global Atom Table),程序運(yùn)行時(shí)檢查該串是否存在來(lái)限制程序多開。(該Atom不會(huì)自動(dòng)釋放,程序退出前必須調(diào)用GlobalDeleteAtom來(lái)釋放Atom)
6)檢查窗口屬性
將某些數(shù)據(jù)通過(guò)SetProp加入到指定窗口的property list,程序運(yùn)行時(shí)枚舉窗口并檢查這些數(shù)據(jù)是否存在來(lái)限制多開。
以上只列舉了最常見的幾種方法,具體應(yīng)用中可以有n種選擇,或綜合運(yùn)用多種方法來(lái)限制。
#pragma once現(xiàn)在貌似只有VC支持這個(gè)宏語(yǔ)句。
不過(guò),我覺得這個(gè)比較好,寫著容易,不羅嗦,就是別的編譯器不支持。
Chrome也有這樣的情況發(fā)生。
我現(xiàn)在也只有說(shuō)為了發(fā)帖子才用IE那種垃圾貨。
SDL 簡(jiǎn)單的音頻視頻庫(kù),是這樣的嗎?
SDL是一個(gè)自由的跨平臺(tái)的多媒體開發(fā)包。
Loki應(yīng)該描述為:C++模板庫(kù)。
ode,bullet 開源的3D物理引擎庫(kù);
2D的物理引擎里面有一個(gè)出名的Box2D。
Orge是OGRE吧?Ogre3D算不上中間件,建議自己去查詢下中間件的概念。
sqlite以及Berkeley DB都是:嵌入數(shù)據(jù)庫(kù)編程庫(kù)。
不知道這個(gè)帖子的意義何在。
后期可以用,維護(hù)的時(shí)候,因?yàn)榭梢赃M(jìn)行自動(dòng)化的回歸測(cè)試。
不過(guò),單元測(cè)試不是萬(wàn)能,但是,能夠保證一些細(xì)節(jié)的可靠。
哦?這樣的么?
我之前用Windows 7 32位的時(shí)候,有的項(xiàng)目會(huì)有問題,有的不會(huì),很是奇怪,我估計(jì)可能是權(quán)限的問題還是怎樣的。
但是,我前幾天換到了64位的操作系統(tǒng)以后,就有問題了,奇了個(gè)怪。說(shuō)實(shí)話,讓我每個(gè)項(xiàng)目都這樣做,我也很煩。
但是,我現(xiàn)在每調(diào)試一次,就要關(guān)閉一次工程,這很煩人的。
采用何種解決方案,視乎你的需求而定。
合適的就是最好的,
所以,如何去做,是你自己去選擇,
我給你多一個(gè)選擇,剩下的就是你自己去選擇了。
它的應(yīng)用是很廣泛的,不管是在線游戲的領(lǐng)域,還是大型網(wǎng)站的領(lǐng)域里面,比比皆是。
在現(xiàn)在,內(nèi)存越來(lái)越便宜,但是磁盤硬盤IO很慢的情況下,不失為一個(gè)良好的解決方案。當(dāng)然,等到固態(tài)硬盤技術(shù)普及了之后,可能就不再需要考慮數(shù)據(jù)庫(kù)的IO問題了。
當(dāng)然,memcache的解決方案也不是萬(wàn)金油,要想減少數(shù)據(jù)庫(kù)對(duì)磁盤的IO操作,那倒是足夠了。
@陳梓瀚(vczh)
你呀,也不能這么偏激,都是為了生計(jì)滴。
@Kevin Lynx
我就知道,他們會(huì)一個(gè)一個(gè)的問下去的,所以,先給大家提個(gè)醒了。
re: UI中包裹物品排序 楊粼波 2010-12-23 14:17
幾百個(gè),不值一提的數(shù)量級(jí).
STL幾乎瞬間搞定.
不管你做什么操作,都會(huì)操作背包里面的邏輯數(shù)據(jù),只要數(shù)據(jù)發(fā)生改變,數(shù)據(jù)就臟了.你可以用觀察者模式,去通知UI或者別的需要訂閱的對(duì)象.
唉,我從第一行的Hello World,到現(xiàn)在已經(jīng)快十四年了.
從小霸王,到電子字典,再到PC,哈哈哈哈.
re: UI中包裹物品排序[未登錄] 楊粼波 2010-12-19 11:13
classyk說(shuō)的對(duì),STL里面有自己實(shí)現(xiàn)快排,效率不成問題,而且以包裹如此小的數(shù)據(jù)規(guī)模而言,綽綽有余.
對(duì)于防止多次排序,是有很好的辦法的.
你設(shè)置一個(gè)"可以排序標(biāo)識(shí)符"比如:m_bCanSortBag,
排完序以后,你就設(shè)置為false.如果,包裹有變化,你設(shè)置為true.
客戶端做一次判定,服務(wù)器端再做一次判定,就可以很好的處理了.
re: 女人完美性生活十大原則 楊粼波 2010-09-25 06:04
--!這都被你翻出來(lái)了.
--!N年沒有用過(guò)php了,
而且現(xiàn)在C++我其實(shí)也是用的VS,通過(guò)samba操作。
你知道setlocale這個(gè)方法的代價(jià)有多大么?會(huì)帶來(lái)什么影響么?
boost::function和boost::bind的使用也是有代價(jià)的,
所以,在設(shè)計(jì)的時(shí)候,需要仔細(xì)的考量。
vptr雖然也有代價(jià),也不能說(shuō)一棒子打死的,雖然繼承會(huì)產(chǎn)生隱性的耦合,不過(guò)在很多場(chǎng)景里面,它是具有它的存在的價(jià)值的。
耦合,也并非全然是壞事情?!暗婉詈稀辈⒎鞘恰皼]耦合”。
接口,就是創(chuàng)建了一個(gè)限制,一個(gè)規(guī)則。人類社會(huì)中,人類不可能脫離限制,脫離規(guī)則,那么就是一個(gè)混亂的世界。同樣,程序的世界也不可能說(shuō)沒有限制,沒有規(guī)則。
Runnable的設(shè)計(jì)實(shí)際上是非常合理的設(shè)計(jì),意圖明顯,結(jié)構(gòu)清晰。
在一個(gè)復(fù)雜的項(xiàng)目里面,結(jié)構(gòu)清晰,意圖明顯,那真是再好不過(guò)的東西了。
我想我應(yīng)該把我中學(xué)母校的口號(hào)拿出來(lái),與大家共勉:
今日我以校為榮,明日校以我為榮。
我是三流的三流大學(xué)畢業(yè)的,以我中學(xué)母校而言,我進(jìn)去這樣的大學(xué),母校該為我蒙羞了,要知道我畢業(yè)的那所中學(xué),每年都有至少十幾個(gè)名牌大學(xué)產(chǎn)出,至少一半以上學(xué)生都是重本。
不管怎樣,做好最好的自己,三流大學(xué)畢業(yè)生不可恥,而是做一個(gè)三流的自己最可恥。
嗯....
其實(shí),我以前有些爛東西發(fā)到主頁(yè),
也是被撤掉過(guò)的.
我就用的POSIX的,用POSIX的還好吧……
LZ雖然封裝得不是很好,不過(guò)至少也是一個(gè)學(xué)習(xí)過(guò)程。
還好,比起doxygen,還是很難用的。
支持的標(biāo)簽還很少,
比如@file @virsion 等等……
需要自己擴(kuò)展一下才行。
不過(guò),有比沒有好呀。。。。
re: UE的LUA注釋的代碼染色問題 楊粼波 2010-07-06 23:24
UEStudio用著還可以,
支持類圖,還有方法列表.
總的來(lái)說(shuō)用著還可以....
當(dāng)然,運(yùn)行調(diào)試貌似有點(diǎn)麻煩.
穩(wěn)妥來(lái)說(shuō),當(dāng)然是能不動(dòng)它里面的東西了.
我是無(wú)所謂,這玩意對(duì)我來(lái)說(shuō)太透明了.
HGE那種簡(jiǎn)單得發(fā)慌的東西,
都被我拆得零零碎碎,
雜七雜八的.
第二種算法,至少要少訪問鏈表的節(jié)點(diǎn)m-1次.
可以直接去profile獲取直觀的時(shí)間損耗.
我把兩種算法都放出來(lái)了,
這個(gè)一比較就很明白了.
第一個(gè)算法,需要循環(huán)鏈表兩次.
第二個(gè)算法,只需要循環(huán)鏈表一次就足夠了.
另外附上遍歷的概念解釋:
所謂遍歷(Traversal)是指沿著某條搜索路線,依次對(duì)樹中每個(gè)結(jié)點(diǎn)均做一次且僅做一次訪問。訪問結(jié)點(diǎn)所做的操作依賴于具體的應(yīng)用問題。
--!這樣子?
汗,是我不解風(fēng)情了?
呃.....
--!這也不是扭曲自己的設(shè)計(jì).
因?yàn)槿绻粋€(gè)東西是給人用的,那接口簡(jiǎn)單明了就OK了.
但是要是分解其原理,
那就不必要做復(fù)雜了.
因?yàn)榻涌诒旧砭褪菫榱似帘螐?fù)雜,
而我現(xiàn)在就是要展示接口背后的東西,
顯然的需要化復(fù)雜為簡(jiǎn)單了^_^
這個(gè)類只是用來(lái)驗(yàn)證和講解用的,
沒有必要做那么復(fù)雜的設(shè)計(jì),那是會(huì)讓人閱讀上有些困難的.
任何東西并不是一味的復(fù)雜就是好的.
呵呵,我也是做的面試題.
還是這個(gè)算法比較符合我的理想中的美學(xué).
@R
的確,這塊代碼算起來(lái)的確是遍歷了兩遍.
其實(shí)在空間上還可以節(jié)省掉一個(gè)臨時(shí)變量的,那就是pFind,可以利用pHead,不過(guò)這樣的話,閱讀起來(lái)就會(huì)讓人誤解.
用EA(Enterprise Architect 7.5)畫的.
re: 回憶 楊粼波 2010-06-02 10:12
@saltyshrimp
嘿嘿,謝謝.是不是要唱一曲:廣州歡迎你?
@碧寧
主要是咱這行業(yè)太卻穩(wěn)定性了.
汗,好多年了……
我都忘記了是從哪里轉(zhuǎn)載到的。
我剛才搜索到原文,
發(fā)現(xiàn)竟然和原文都不符。
現(xiàn)在已經(jīng)補(bǔ)上相關(guān)信息。