程式最佳化是個永恒的話題。隨著MMX,SSE,SSE2硬體的普及,越來越多的編譯器開始支援SIMD指令編程,程式員編寫程式時可以很方便的利用先進的硬體為程式帶來更大的效能提升,所為“花一樣錢補兩樣”,真是惠而不費,程式員的福音。能夠使用高效能的硬體固然好,不過,如果親身進行執行個體分析,想當然的認為只要利用硬體的先進功能就能帶來程式效率上提升,可能反而會編製出能夠利用進階硬體功能的低效程式來。究竟是演算法和進階硬體誰能夠取得更高的效能?傳統的演算法與先進硬體誰能夠為程式帶來更大的效能提升?還
傳統處理方法 傳統處理方法純粹基於C++,通過指標操作進行處理。通常的最佳化是使用定點數來代替浮點數,這裡使用的方法為: 比值=(顏色分量值 * 65535) / 255 轉換成位移操作: 比值=(顏色分量值 << 16) >> 8 進行一步簡化: 比值=顏色分量值 << 8 代碼如下:float test_Normal_Filter(){ BYTE* buf = (BYTE *)malloc(
傳統方法+OpenMP使用OpenMP對傳統方法進行最佳化。感謝OpenMP,實現多線程最佳化方便多了!多核時代,OpenMP將成為我們的利器!float test_Normal_OMP_Filter(){ BYTE* buf = (BYTE *)malloc(1024 * 1024 * sizeof(int)); //分配記憶體 BYTE* ptr = buf; // 記憶體指標 //背景色,用於和前景色彩進行溶合 int background_R = 0xF8,
相對於傳統的COM伺服器,COM的非同步模式可以將同步伺服器變為兩階段的非同步伺服器。“非同步”兩個字貌似可以用於前文所說的事務非同步,但且慢,先瞧個仔細再說。COM的非同步確實是非同步,提供了輪詢和事件兩種方法,VS更提供了強大的嚮導,而且,天生可以跨越進程邊界和機器邊界(解決了網路傳輸的問題)。不過,COM非同步伺服器也有以下問題:1。COM非同步伺服器必須是EXE形式,這意味著調用必須跨越進程邊界,這會帶來效能損失。2。調用對象必須確保同一時刻只處理一個調用。當調用對象正在處理另一個方法調
叢集伺服器的實現叢集伺服器由兩個或更多個獨立的Windows NT/Windows 2000/Windows
一些擷取路徑的函數。 '=====================================================================' Path'=====================================================================Function GetCurDir() GetCurDir = FileSysObj.GetAbsolutePathName(".")
使用Intrinsics技術,實現SIMD,再加上OMP這次很簡單,只需在迴圈上加上OpenMP的指示:#paragm omp parallel forfor(int h = 0; h < 1024; h++){ ....... #paragm omp parallel for for(int w = 0; w < 1024; w++) ......}You see,現在就剩下比較結果了。int _tmain(int argc, _TCHAR* argv[]
如何在VC程式中獲得當前顯示器的解析度 int xSize = ::GetSystemMetrics(SM_CXSCREEN); int ySize = ::GetSystemMetrics(SM_CYSCREEN); xSize * ySize就是你要的800*600或1024*768。 另一種方法: CRect rect; ::GetWindowRect(::GetDesktopWindow(),rect);
設定檔的結構設定檔統一放在Config目錄下,由一個主檔案Main.conf和若干個子設定檔群組成,Main.Conf儲存了副檔名與子設定檔之間的映射。指令碼運行時會先讀取Main.conf,根據Main.conf的內容擷取子設定檔的路徑。究竟採用哪個子設定檔是由待處理檔案的副檔名來決定的。沒有配置的,則使用預設設定(參考“常量定義”一章)。設定檔支援單行注釋,以;開頭的行為注釋行。不支援尾部注釋。 Main.Conf內容樣本h=cpp.confc=cpp.confhpp=cpp.confcpp
要實現代碼關鍵字著字功能,就要對每個字進行甄別,就需要一個關鍵字列表並進行大量的表尋找。因此散列的支援是必不可少的。關於散列的演算法原理就不多說了,看代碼。 '=====================================================================' Hash'====================================================================
註冊表操作函數這裡的註冊表操作函數主要是用於添加/刪除右鍵菜單。關於右鍵菜單的原理,看看代碼很容易明白的。 '=====================================================================' Registry'=====================================================================Function UpdateReg(reg)
這個模型是在原有的[封裝IOCP]一文基礎上,使用[基於C++的事件機制設計[2.0]]的事件機制進行了修改,替代了原有的虛函數方法。閑言少敘,請看代碼。 /// 自定使用預設線程的IOCPtypedef TIOCPService<> TMyIOCP; .可以看到,現在的模型使用更簡單。問題是,既然是事件,有什麼事件?怎麼處理事件?事件原型定義如下:/*** @class TIOCPThread* @brief IOCP線程對象* @note 對_beginthreadex的封裝*/
現在是戲肉部分,將任意格式的檔案轉換為PDF。註:因為使用Word的儲存為PDF檔案功能,所以是有限制的,必須是Word能夠正常開啟的檔案才能進行轉換,否則.... '===============================================================' Format'===============================================================Function
[Remoting] 二:遠程對象在分布系統中,遠程對象需要跨越應用程式定義域進行傳遞,因此其表示方式會有所不同。基於效能和資料共用等原因考慮,Remoting 中遠程對象可以是 "值封送對象(MBV)" 或 "引用封送對象(MBR)"。MBV 機制類似於 Web 無狀態請求,伺服器建立對象執行個體傳遞給通道發送到用戶端,而後伺服器端不再繼續維護其狀態和生存期。而 MBR
一.建立部署項目 1. 在[檔案] 功能表上,選擇“添加項目”->“建立項目”。 2. 在“添加項目”對話方塊中,選擇“項目類型”窗格中的“安裝和部署項目”,然後選擇“模板”窗格中的“安裝項目”。在“名稱”框中,鍵入 DBCustomAction Installer。 3. 單擊“確定”關閉對話方塊。 4. 在“屬性”視窗中,選擇 ProductName 屬性並鍵入 學生資訊管理系統。 並在AddRemoveProgramsIcon
現在我們一步步來看看實現:先是TTcpAcceptor,該類僅重載了兩個方法,如下:#include "TCPAcceptor.h"namespace igame{int TTcpAcceptor::validate_connection (const ACE_Asynch_Accept::Result& result, const ACE_INET_Addr &remote, const ACE_INET_Addr& local){if
摘要:.NET 架構提供了新的類,可以方便地建立多線程應用程式。本文介紹如何使用 Visual Basic .NET 的多線程編程技術來開發效率更高、響應速度更快的應用程式。 目錄簡介 多執行緒的優點 建立新線程 同步線程 線程計時器 取消任務 總結 簡介過去,Visual Basic 開發人員建立的應用程式都是程式任務依次執行的同步應用程式。雖然多線程應用程式因多個任務幾乎同時運行而具有更高的效率,但使用早期版本的 Visual Basic
請原諒偶拖篇幅,這裡奉上拖欠的數字。TTcp的實現如下: #include "Tcp.h"namespace igame{TTcp::TTcp():m_TcpNetThd(0){ACE_NEW_NORETURN(m_TcpNetThd, TTcpNetThread()); // 建立TTcpNetThread對象執行個體}TTcp::~TTcp(){if (m_TcpNetThd) // 釋放delete m_TcpNetThd;}void TTcp::open(){ACE_TRACE("
Winsock流程簡述1.基於連線導向的socket編程(TCP) 伺服器端: (1)建立通訊端(socket) (2)將通訊端綁定到一個特定的IP和PORT (3)將通訊端設為監聽模式,準備接受客戶的請求(listen) (4)準備客戶請求到來;當請求到來後,接受串連請求,返回一個新的對應於此次串連的通訊端(accept) (5)用返回的通訊端和用戶端進行通訊(send/recv) (6)返回,等待另一客戶請求.
有太多的原因讓我忽略了 Remoting,不過現在用它來開始 SOA 和 WCF 的旅途還是不錯的選擇。.NET Remoting 封裝了分布式開發的訊息編碼和通訊方式,讓我們用非常簡單的方式既可完成不同模式的分布系統開發,同時其可配置、可擴充的特性也讓我們擁有極大的靈活性。當然,我更看好其升級版本 —— WCF。要瞭解 Remoting 的基本資料和介紹,還是看 MSDN 比較好。先寫一個簡單的 Example 來體驗一下,為了方便,我直接在一個工程裡面建立不同的應用程式定義域來類比分布模式。