Time of Update: 2018-12-08
在C# winform應用程式中,用以下代碼可以進行一些記憶體使用量的最佳化複製代碼 代碼如下:using System;using System.Diagnostics;using System.Runtime.InteropServices;/// <summary>/// 包含各種記憶體管理、最佳化的方法/// </summary> public class Memory { private static readonly Version
Time of Update: 2018-12-08
本文和大家講一下如何使用C#來建立系統中只能有該程式的一個執行個體運行。要實現程式的互斥,通常有下面幾種方式,下面用 C# 語言來實現:方法一:使用線程互斥變數. 通過定義互斥變數來判斷是否已運行執行個體.把program.cs檔案裡的Main()函數改為如下代碼:複製代碼 代碼如下:using System;using System.Windows.Forms;using System.Runtime.InteropServices;namespace NetTools{ static
Time of Update: 2018-12-08
前幾篇我已經向大家介紹了如何使用GDI+來繪圖,並做了一個的執行個體,這篇我向大家介紹下如何來做一個類似windows畫圖的工具.個人認為如果想做一個功能強大的繪圖工具,那麼單純掌握GDI還遠遠不夠,我的目前也只能做一個比較簡單的繪圖工具了.不足之處,歡迎大家討論!先來看一下最終效果吧:主要實現功能:畫直線,矩形,橡皮,圓形,切換顏色,開啟圖片,儲存圖片,清除圖片,手動調節畫布大小;軟體剛啟動時,為一張空白畫布,我們可以直接在畫布上繪畫,也可以通過菜單中的“開啟”,匯入一張圖片,然後我們就可以在
Time of Update: 2018-12-08
1.複製代碼 代碼如下: private void Form1_Load(object sender, System.EventArgs e) for(double d=0.01; d< 1; d+=0.02) { System.Threading.Thread.Sleep(1); Application.DoEvents(); this.Opacity=d; this.Refresh(); }2
Time of Update: 2018-12-08
最近被.net winform中的控制項布局搞困惑了,由於控制項都是使用Dock方式的,操作起來也是比較方便,如果最大化,視窗大小調整等,都可以隨著視窗大小的變化而變化。但問題是,.net winform的dock方式是根據先添加的控制項順序進行優先順序Dock排列的,假設我想目前有三個控制項A、B、C分別以 Top、Bottom以及Fill方式填充視窗即視窗看起來應該是這樣的:---------------------A---------------------C---------------
Time of Update: 2018-12-08
複製代碼 代碼如下:const int SECOND = 1;const int MINUTE = 60 * SECOND;const int HOUR = 60 * MINUTE;const int DAY = 24 * HOUR;const int MONTH = 30 * DAY;if (delta < 0){ return "not yet";}if (delta < 1 * MINUTE){ return ts.Seconds == 1 ? "1秒前" :
Time of Update: 2018-12-08
在將各種類型的資料構造成字串時,sprintf 的強大功能很少會讓你失望。由於sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,後者則直接在命令列上輸出。這也導致sprintf 比printf 有用得多。sprintf 是個變參函數,定義如下:int sprintf( char *buffer, const char *format [, argument] ... );除了前兩個參數類型固定外,後面可以接任意多個參數。而它的精華,顯然就在第二個參數:
Time of Update: 2018-12-08
sprintf 是個變參函數,使用時經常出問題,而且只要出問題通常就是能導致程式崩潰的記憶體訪問錯誤。下面對sprintf 常出錯誤問題進行簡單的總結:1、緩衝區溢位:第一個參數的長度太短了,解決辦法:將第一個參數的長度擴大。列印字串時,盡量使用”%.ns”的形式指定最大字元數char buf[5];sprintf(buf, ":%d", 3246);printf("buf is %s\n", buf);將buf修改為char buf[6]2、忘記第一個參數:原因用printf
Time of Update: 2018-12-08
前言:本文書寫的格式與其它不相同。本文題目說是關於C++ API的思考,其實也不僅僅是C++,對於其它語言同樣適用。API實際是指Application Programming
Time of Update: 2018-12-08
編寫無錯代碼的最好方法是把防止錯誤放在第一位。 1、while語句後面的空語句問題? while語句是一個迴圈語句,有時候需要空語句有時不需要空語句。為了避免出現誤用用語句我們規定在while使用空語句的時候才用下列方式:while(*pchTo++ = *pchFrom)
Time of Update: 2018-12-08
C++實際開發的過程會經常使用到map。map是一個key-value值對,key唯一,可以用find進行快速的尋找。其時間複雜度為O(logN),如果採用for迴圈進行遍曆資料時間複雜度為O(N)。如果map中的資料量比較少時,採用find和for迴圈遍曆的效率基本沒有太大的區別,但是在實際的開發過程中,儲存在map中的資料往往是大量的,這個時候map採用find方式效率比遍曆效率高的多。確定採用find方式尋找資料後,我們需要考慮儲存map的空間複雜度,對於基礎資料類型的資料(int
Time of Update: 2018-12-08
在實際計算中可能會出現浮點型的無效資料,格式化輸出到檔案中內容為1.79769e+308,輸出到介面就是很大一串資料。這兩種方式無論哪種在閱讀和尋找時就不是很方便。在開發中遇見浮點型資料無效值得判定。無效值定義如下:#define InvalidDouble *(double*)("\xff\xff\xff\xff\xff\xff\xef\x7f")double price;.........(計算步驟省掉)price=GetPrice();
Time of Update: 2018-12-08
c++中提供了四種新的強制轉換分別是:const_cast、dynamic_cast、reinterpret_cast、static_cast.這四種轉換類型,每一種都適用於特定的目的:const_cast 一般用於強製取消對象的常量性。它是唯一能夠做到這一點的C++風格的強制轉型。dynamic_cast 主要用於執行"安全向下轉型",也就是說,要確定一個對象是否是一個繼承體系中的一個特定類型。它是唯一不能用舊風格文法執行強制轉型。reinterpret_cast
Time of Update: 2018-12-08
在系統開發過程中出現的bug相對而言是比較好解決的,花費在這個上面的調試代價不是很大,但是在系統整合後的bug往往是難以定位的bug(最好方式是打樁,通過打樁可以初步鎖定出錯的位置,如:進入函數前列印日誌,離開時再次列印日誌)。而這些難以定位的bug基本分為2類:記憶體錯誤和並非問題。
Time of Update: 2018-12-08
這個應該是一個MFC程式,ON_MESSAGE是添加訊息響應函數,這句話就是添加熱鍵WM_HOTKEY的響應函數。當你註冊了熱鍵之後,當使用者按下熱鍵,會執行OnHotKey函數來處理這個訊息。錯誤就應該是OnHotKey這個函數的聲明錯誤了,傳回值應該是LRESULT. VS2008對訊息的檢查更為嚴格,以前在VC6下完全正常啟動並執行訊息映射在VS2008下編譯不通過ON_MESSAGE(WM_message,OnMyMessage);OnMessage傳回值必須為LRESULT,其形式為:
Time of Update: 2018-12-08
第一個:------------------------------------------------------複製代碼 代碼如下:#include <stdio.h>#include <string.h>void tell_me(int f(const char *, const char *));int main(void){ tell_me(strcmp); tell_me(main); return 0;}void tell_me(int
Time of Update: 2018-12-08
是不是只有編譯的時候才知道程式寫了錯誤?有沒有在未編譯的時候就讓機器幫你檢查錯誤的工具呢?答案是:有!!splint工具.用一個最簡單的HELLO WORLD來表述:=====================================複製代碼 代碼如下:/*錯誤很明顯*/#include <stdio.h>int main(void){ print("hello world\n", s); return}---------------------------------
Time of Update: 2018-12-08
一致性hash演算法實現有兩個關鍵問題需要解決,一個是用於結點儲存和尋找的資料結構的選擇,另一個是結點hash演算法的選擇。
Time of Update: 2018-12-08
1.來源程式的編譯 在Linux下面,如果要編譯一個C語言來源程式,我們要使用GNU的gcc編譯器. 下面我們以一個執行個體來說明如何使用gcc編譯器. 假設我們有下面一個非常簡單的來源程式(hello.c): int main(int argc,char **argv) {printf("Hello Linux/n"); }要編譯這個程式,我們只要在命令列下執行: gcc -o hello hello.c gcc
Time of Update: 2018-12-08
Windows 服務被設計用於需要在後台啟動並執行應用程式以及實現沒有使用者互動的任務。為了學習這種控制台應用程式的基礎知識,C(不是C++)是最佳選擇。本文將建立並實現一個簡單的服務程式,其功能是查詢系統中可用實體記憶體數量,然後將結果寫入一個文字檔。最後,你可以用所學知識編寫自己的 Windows 服務。 當初我寫第一個NT 服務時,我到 MSDN 上找例子。在那裡我找到了一篇 Nigel Thompson 寫的文章:“Creating a Simple Win32 Service