经验总结
2015-12-01 20:21
295 查看
变长参数
[code]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); }
线程基类和锁
[code]#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颜色
[code]#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}};要将她传递作为一个参数传递给一个函数, 有以下几种形参方法:
[code]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”: 找不到标识符
[code]snprintf()函数的格式跟printf差不多一样,是在c里面用的函数,包含在`#include <stdio.h>`头文件中。 但snprintf()函数并不是标准c/c++中规定的函数,所以在许多编译器中,厂商提供了其相应的实现的版本。在gcc中,该函数名称就snprintf(),而在VS中称为_snprintf。 所以在需要使用snprintf()时改成_snprintf就可以了,或则在预编译处加入:
[code] #if _MSC_VER #define snprintf _snprintf #endif
模板类和模板函数
模板类成员函数声明与定义[code] template<class T> class A { public: void func(); } template<class T> void A<T>::func() { /******/ }
普通类模板函数
[code]class B { public: template<MsgId id> void Recv(); } template<> void B::Recv<MSG_XX>() { /*****/ }
相关文章推荐
- 计算机网络:数据链路层
- 图——每对顶点之间的最短路径 ——弗洛伊德算法
- iOS7Unable to create description in descriptionForLayoutAttribute_layoutItem_coefficient. Something
- c# 学习笔记
- php 使用curl模拟登录人人网
- LeetCode 137 Single Number II
- BZOJ(1096)(斜率优化DP)
- 用js实现每隔一秒刷新时间(含年月日时分秒)
- Android Manifest标签之data, grant-uri-permission, instrumentation, intent-filter
- 常用命令日志查看
- 点击jqGrid表格,弹出需要的表格的数据
- 利用iText.jar操作pdf文档
- 5.11 像素着色器阶段
- 如何设置UITabBar和UINavigationBar的内容
- LeetCode OJ:Jump Game II(跳跃游戏2)
- mql4 upadte history
- dpPOJ 2027 LCIS(最长上升公共子序列)
- Ubuntu离线搭建NFS服务器
- Android并发编程之全方位解析AsyncTask
- Java异常信息处理