16,472
社区成员
发帖
与我相关
我的任务
分享
CPtrList m_listBuf; // 定义指针链表
struct BMPDATA // 数据
{
BYTE *pBuf;
SYSTEMTIME systime;//取当前时间
};
// 建立内存池
//m_BufSize是很大的1个未知数,我遇到的是5M,
int m_BufSize = 3 * nBmpWidth * nBmpHeight;
BYTE *pArrayBuf = new BYTE[10 * m_BufSize];//内存池有10个buf反复使用,10个就是50M内存
for(int i = 0; i < 10; i++)
{
BMPDATA *pDATA = new BMPDATA;
pDATA->pBuf = pArrayBuf + i * m_BufSize;
m_listBuf.AddTail(pDATA);
}
//使用内存池
//实际情况:此函数为回调函数,要求每秒执行无限接近15次,为了满足效率,当然此时CPU未100%,现CPU太厉害了
void OnCaptureBackDay(BYTE * pBuffer)
{
//............很多处理
if(/*条件满足*/)//此条件满足出现不规律
{
SaveToThread(BYTE * pBuffer);//这是个存盘操作,比较耗时
}
//............很多处理
}
void SaveToThread(BYTE * pBuffer)//存盘操作
{
static int idx = 0;
if(idx == 10)
{
idx = 0;
}
//接顺序取1块内存来用,假设10块内存足够使用
BMPDATA *pDATA = (BMPDATA *)(m_listBuf.GetAt(m_listBuf.FindIndex(idx++)));
memcpy(pDATA->pBuf, pBuffer, m_BufSize);//copy内存
GetLocalTime(&(pDATA->systime));//取时间
//扔到线程中不管了,存盘在其它线程中完成
CloseHandle(CreateThread(NULL, 0, ThreadFunc, pDATA, 0, NULL));
}