变长参数
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 <Windows.h>
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<HThread*>(lpParm);
pThrd->Run(); //具体子类实现的线程功能
return 0;
}
void HThread::Start()
{
mThread = CreateThread(NULL,0,ThreadFunc,this,0,NULL); // 0/CREATE_SUSPENDED
}
设置conslole颜色
#include <conio.h>
inline void SetTextColor(WORD colors)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole,colors);
}
// SetTextColor(FOREGROUND_BLUE|FOREGROUND_INTENSITY);
注: 文本相关的定义在头文件: wincon.h中, 定义了字体颜色, 背景颜色, 输出位置等信息, 通过位信息标记;
二维数组参数传递
比如有一个二维数组:
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 <stdio.h>`头文件中。
但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<T>::func() { /******/ }普通类模板函数
class B { public: template<MsgId id> void Recv(); } template<> void B::Recv<MSG_XX>() { /*****/ }
vector预定义长度
.resize(len)
本文详细解析了C++编程中变长参数的使用方法,介绍了线程基类和锁的概念及其实现方式,并讨论了互斥锁和锁类的具体应用。
2万+

被折叠的 条评论
为什么被折叠?



