経験の総括

7208 ワード

のびパラメータ
void ShowLog(const char* formart, ...)
{
    FILE* filelog = fopen("log.txt","a+"); //     
    if(!filelog)
        return;
    char StrOut[100] = {0};
    va_list arg_ptr = NULL;
    va_start(arg_ptr,formart);
    vsprintf_s(StrOut,formart,arg_ptr);
    va_end(arg_ptr);
    fprintf(fileLog,StrOut);
    fclose(filelog);
}

スレッドベースクラスとロック
#include 
class HThread
{
public:
    HThread();
    virtual ~HThread();
    virtual void Run() = 0;
    virtual void Start();
    void SetId(int Id){mThreadId = Id;};
    int GetId(){return mThreadId;};
    HANDLE GetHandle(){return mThread;};
private:
    static DWORD WINAPI ThreadFunc(LPVOID lpParm);
    HANDLE mThread;
    int  mThreadId;
};

//    
class Mutex
{
private:
    Mutex(const Mutex&);
    Mutex& operator=(const Mutex&);
public:
    Mutex():cs(){InitializeCriticalSection(&cs);}
    ~Mutex(){DeleteCriticalSection(&cs);}
    void lock(){EnterCriticalSection(&cs);}
    void unlock(){LeaveCriticalSection(&cs);}
private:
    CRITICAL_SECTION cs;
};

//   
class LOCK
{
private:
    LOCK(const LOCK&);
    LOCK& operator=(const LOCK&);
public:
    explicit LOCK(Mutex& c):cs(c){cs.lock();}
    ~LOCK(){cs.unlock();}
private:
    Mutex& cs;
};

//.cpp
HThread::HThread():mThreadId(0){}
HThread::~HThread(){}
DWORD WINAPI HThread::ThreadFunc(LPVOID lpParm)
{
    assert(lpParm);
    HThread* pThrd = static_cast(lpParm);
    pThrd->Run(); //           
    return 0;
}
void HThread::Start()
{
    mThread = CreateThread(NULL,0,ThreadFunc,this,0,NULL); // 0/CREATE_SUSPENDED
}

コントロールカラーの設定
#include <conio.h>
inline void SetTextColor(WORD colors)
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole,colors);
}
// SetTextColor(FOREGROUND_BLUE|FOREGROUND_INTENSITY);

注意:テキスト関連の定義はヘッダファイル:wincon.hでは、フォント色、背景色、出力位置などの情報を定義し、ビット情報タグを通過する.
2 D配列パラメータの転送
たとえば、2 D配列があります.int H[2][2] = {{1,2},{3,4}};は、パラメータとして関数に渡すために、次のいくつかのパラメータメソッドがあります.
void Func(int a[][2]); //           ,        [][]  
//        : 
void Func(int (*a)[2]); 
//   :
Func(H);
/************************************/
//               ,              
void Func(int **a, int m, int n);
//   :
Func((int**)H,2,2);   *((int*)array + n*i + j);

「snprintf」:識別子が見つかりません
snprintf()      printf     ,  c      ,   `#include       `    。
 snprintf()       c/c++      ,         ,              。 gcc ,      snprintf(),  VS   _snprintf。        snprintf()   _snprintf    ,         :
 #if _MSC_VER
 #define snprintf _snprintf
 #endif

テンプレートクラスとテンプレート関数
テンプレートクラスメンバー関数の宣言と定義
 template<class T>
class A
{
public:
    void func();
}
template<class T>
void A::func()
{ 
    /******/
} 

一般クラステンプレート関数
class B
{
public:
    template
    void Recv();
}
template<>
void B::Recv()
{
    /*****/
}

vector事前定義長さ
.resize(len)
プリコンパイルヘッダファイル
http://www.cnblogs.com/sfqh/p/3389876.html