Time of Update: 2018-12-04
libevent源碼深度剖析二——Reactor模式張亮前面講到,整個libevent本身就是一個Reactor,因此本節將專門對Reactor模式進行必要的介紹,並列出libevnet中的幾個重要組件和Reactor的對應關係,在後面的章節中可能還會提到本節介紹的基本概念。1
Time of Update: 2018-12-04
原文地址:http://dev.gameres.com/Program/Abstract/Thinking/online_g_4.htm在這一章節,我想談談關於伺服器端的指令碼的相關設計。因為在上一章節裡面,談NPC智能相關的時候已經接觸到一些指令碼相關的東東了。還是先來談談指令碼的作用吧。 在基於編譯的伺服器端程式中,是無法在程式的運行過程中構建一些東西的,那麼這個時候就需要指令碼語言的支援了,由於指令碼語言涉及到邏輯判斷,所以光提供一些函數介面是沒用的,還需要提供一些簡單的文法和文法解析的
Time of Update: 2018-12-04
loopos@webols:~/work/apue$ gcc -o fig11.2 fig11.2.c/tmp/ccXTzASv.o: In function `main':fig11.2.c:(.text+0x2fe): undefined reference to `pthread_create'collect2: ld returned 1 exit
Time of Update: 2018-12-04
libevent源碼深度剖析六——初見事件處理架構張亮 前面已經對libevent的事件處理架構和event結構體做了描述,現在是時候剖析libevent對事件的詳細處理流程了,本節將分析libevent的事件處理架構event_base和libevent註冊、刪除事件的具體流程,可結合前一節libevent對event的管理。1
Time of Update: 2018-12-04
libevent源碼深度剖析一——序幕張亮 1 前言Libevent是一個輕量級的開源高效能網路程式庫,使用者眾多,研究者更甚,相關文章也不少。寫這一系列文章的用意在於,一則分享心得;二則對libevent代碼和設計思想做系統的、更深層次的分析,寫出來,也可供後來者參考。附帶一句:Libevent是用c語言編寫的(MS大牛們都偏愛c語言哪),而且幾乎是無處不函數指標,學習其原始碼也需要相當的c語言基礎。2 Libevent簡介上來當然要先誇獎啦,Libevent
Time of Update: 2018-12-04
因為原先安裝的時候是裝的英文語言環境,剛剛想改回中文語言環境 ,看到系統功能表上有個language 選項,然後上去找到 PRC 點選就就reboot 哪知道重啟後就是亂碼什麼也認不到, 怎麼辦呢? 開始的時候因為不知道用命令把語言設定環境調出來,所以到系統功能表中按個地找, 但是怎麼也找不到, 然後到網上查到了調出這個語言設定的命令是:system-config-language 一下就解決了。
Time of Update: 2018-12-04
libevent源碼深度剖析四——libevent原始碼檔案組織1 前言詳細分析原始碼之前,如果能對其代碼檔案的基本結構有個大概的認識和分類,對於代碼的分析將是大有裨益的。本節內容不多,我想並不是說它不重要!2
Time of Update: 2018-12-04
製作視頻功能在下面的 Demo 中呢,主要是使用了以下的幾個特殊點的 API ,包括 cvCreateVideoWriter和 cvWriteFrame CvVideoWriter* cvCreateVideoWriter( const char* filename, int fourcc, double fps,
Time of Update: 2018-12-04
用Microwindows(Nano-X)編寫“hello world”By: 吳垠Date:2008-05-09Homepage:http://blog.csdn.net/wooinEmail:lazy.fox.wu#gmail.comCopyright:該文章著作權由吳垠和他可愛的老婆小包子所有。可在非商業目的下任意傳播和複製。對於商業目的下對本文的任何行為需經作者 同意。Link: http://blog.csdn.net/wooin/archive/2008/05/14/2446721.
Time of Update: 2018-12-04
轉載一篇討論有關DLL的匯出類的文章轉載地址:http://hi.baidu.com/zhuangzi200323/blog/item/7c8982318b359fae5fdf0e6d.htmlDLL匯出類的問題DLL動態連結程式庫是程式複用的重要方式,DLL可以匯出函數,使函數被多個程式複用,DLL中的函數實現可以被修改而無需重新編譯和串連使用該DLL的應用程序。作為一名物件導向的程式員,希望DLL可以匯出類,以便在類的層次上實現複用。所幸的是,DLL確實也可以匯出類。然而事實卻沒這麼簡單,匯
Time of Update: 2018-12-04
1.提取函數把一段相關的代碼獨立出來放入一個單獨的函數,並讓函數名稱解釋函數用途。 2.內嵌函式一個函數中的代碼和該函數名稱同樣清晰,直接在函數調用處插入函數本體,移除該函數。 3.用函數替換臨時變數你的程式以一個臨時變數儲存某一運算式的結果,該結果可能在其他地方用到,可以用一個查詢函數替換該臨時變數。 4.引入解釋變數你有一個複雜的運算式,該運算式難以理解,可以引入解釋變數,以該變數解釋運算式的一部分或全部,從而使該運算式易於理解,可以優先考慮用函數代替運算式或其一部分,該方法在複雜條件邏輯中
Time of Update: 2018-12-04
自己寫的幾個簡單常用的指令碼By:吳垠Date:2007-02-01Homepage:http://blog.csdn.net/wooinEmail:lazy_fox#msn.com著作權資訊:該文章著作權由吳垠和他可愛的老婆小包子所有。可在非商業目的下任意傳播和複製。對於商業目的下對本文的任何行為需經作者同意。連絡方式:lazy.fox.wu#gmail.com1.清除一個svn工作目錄中的所有.svn檔案夾,包括所有的子目錄,使其成為一個普通的檔案夾,不再受svn控制。 1
Time of Update: 2018-12-04
1.搬移函數-----函數駐留地不合適某個類中的函數對另一個類更感興趣,把該函數搬移到另一個類中。 2.提取類-----類的職責過多某個類做了應該由兩個類做的事情,應該遵循類的單一職責原則,提取出一個新類。 3.引入外加函數你需要某個類有個額外的方法,但你又不能修改類的代碼,可考慮使用裝飾模式添加需要的功能。
Time of Update: 2018-12-04
libevent源碼深度剖析十三——libevent訊號處理注意點前面講到了libevent實現多線程的方法,然而在多線程的環境中註冊訊號事件,還是有一些情況需要小心處理,那就是不能在多個libevent執行個體上註冊訊號事件。依然冠名追加到libevent系列。 以2個線程為例,做簡單的情境分析。1 首先是建立並初始化線程1的libevent執行個體base1,線程1的libevent執行個體base2;2 在base1上註冊SIGALRM訊號;在base2上註冊SIGINT訊號;3
Time of Update: 2018-12-04
Windows通過進階音頻函數、媒體控制介面MCI裝置驅動程式;低級音頻函數MIDI Mapper、低級音訊裝置驅動;以及DirectSound提供了音頻服務,可以從音效卡擷取音頻流。 1. 播放音效檔的其它方法 在介紹wavex系列之前,我先來介紹之外的其它幾種方法: 1.1
Time of Update: 2018-12-04
1.以對象取代欄位某些開始時簡單的欄位變得不再簡單,需要更多額外的功能,可以考慮以對象代替該欄位(一個或多個欄位)。 2.以對象取代數組如果你有一個數組,其中不同的元素代表不同的東西,則可以用一個對象代替數組。 3.以符號常量取代魔數 4.封裝集合(collection)有個函數返回一個集合對象,可以考慮讓這個函數返回該集合對象的一個唯讀視圖,以免無意中修改集合。 5.用類取代類型碼class之中有一個數值型的類型碼,可以考慮用一個新的類取代該類型碼,最好使用型別安全枚舉模式,可參考effect
Time of Update: 2018-12-04
重構:使用一系列重構手法,調整軟體內部結構,目的在不改變軟體外部可察行為的前提下,提高其可理解性,降低其修改成本。 兩頂帽子:添加新功能和重構,添加新功能時不修改既有代碼,只管添加新功能,並讓其通過測試,添完後對代碼進行調整使其更易於理解,如果發現添加新功能比較困難,則可以先對代碼進行重構使添加新功能比較容易進行。 為什麼進行重構:重構對代碼進行整理,讓所有的東西回到應有的位置,使代碼清晰易懂,易於擴充和維護。 何時重構三次法則:事不過三,三則重構。添加新功能時一併重構:添加新功能時如果發現原有
Time of Update: 2018-12-04
在寫一個程式碼剖析器時,運用的是C語言,其中一個函數,重複調用時malloc分配不了記憶體,可用new替換了就可以了,弄不明白什麼原因。//分配一個函數;pFuncPro AddFunc(const char * name){//為什麼重複調用AddFunc函數malloc分配不了記憶體,而new可以;//pFuncPro func = (pFuncPro)malloc(sizeof(funcProLen));pFuncPro func = new FuncPro;if(func !=
Time of Update: 2018-12-04
1.重複的代碼(重複的代碼修改時需要修改多處,容易出現不一致)如果一個類內有多個函數有重複的代碼,可以提取出來放到一個新函數中,然後讓用到這些代碼的函數調用新函數;如果互為兄弟的兩個子類中含有重複代碼,則可以提取出來放到父類中;如果其功能骨架相同,可用模版方法模式;如果毫不相干的兩個類中有重複代碼,可提取出來放到一個單獨的類中,然後通過複合調用新類。 2.過長函數(難以理解)函數過長時可以把它分解為多個小型函數,以函數做什麼而不是怎麼做命名函數,如果函數參數列過長,可以考慮引入一個參數對象,如果
Time of Update: 2018-12-04
原型:extern void *malloc(unsigned int num_bytes);標頭檔:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 與 malloc.h 的內容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。功能:分配長度為num_bytes位元組的記憶體塊傳回值:如果分配成功則返回指向被分配記憶體的指標,否則返回null