(1)线程操作
以前总是在线程中用无限循环,例如while(1)等,这样在程序最后要退出线程时总是用terminatethread。然而我们完全可以手工退出线程,只要修改成whilebactive),在创建线程的时候设置bactivetrue,要退出的话只要设置bactivefalse即可。这是个全局变量,它的存在有一定的风险。
 
(2)waitefor一个事件,可以自己定义
#define WAITFOR(ucCondition, uTimeoutInMs, bOK) \
{ \
    UINT32 uTimeRemain = (uTimeoutInMs); \
    while (uTimeRemain > 0) \
    { \
        if (ucCondition) break; \
        pf_msleep(10); \
        uTimeRemain-=10; \
    } \
    if (uTimeRemain > 0) \
        bOK = TRUE; \
    else bOK = FALSE; \
}
 
(3)状态函数指针数组
用来循环调用一系列函数,并由状态来控制是否退出循环调用或者下一个要调用的是哪一个状态函数。状态可以作为数组的下标,来进行调用相应的状态函数。所有的状态函数都应该有相同的形参表。要有一个end状态及状态数组以退出循环调用。在每个状态函数中可以指定下一个状态,也就是下一个要调用的状态函数。
 
(4)环形buffer
 
(5)封装底层的差异
此时如果底层有两套不同的代码,可在一个统一的.c文件中通过不同的宏定义来#include不同的代码(.c)文件。同时要有一个统一的.h文件,来根据不同的宏定义来#include不同的头文件。
 
(6)包含不同的.lib文件
如果有多套不同的.lib文件,可以在一个统一的.c/.cpp文件(该文件应该在工程中)中通过不同的宏定义来包含不同的.lib文件。
#pragma comment(lib, ".lib文件所在的路径")