資料的讀取和寫入管理,可以通過列表和環型列表來實現,文字使用環型列表來實現資料的讀取和寫入操作,當寫資料超過緩衝區大小時,通過讀寫位置重複利用已讀取的區域寫入資料值。
**:
/*
描述: 環型快取區操作類
說明: 本類對記憶體做環型快取區管理
*/#ifndef __circlebuffer_h__
#define __circlebuffer_h__
#pragma once
#include #include using namespace std;
//幀型別
typedef enum e_frametype
frametype;
//幀資料
typedef struct tagframedataframedata;
class circlebuffer
;#endif
#include "stdafx.h"
#include "circlebuffer.h"
#include #include #include typedef boost::shared_lockboost_share_lock;
typedef boost::unique_lockboost_unique_lock;
circlebuffer::circlebuffer(void)
circlebuffer::~circlebuffer(void)
int circlebuffer::iabs(int x)
//初始化
bool circlebuffer::init(int ntotaldatabufferlength,int nframesize)
m_pbufferdata = new unsigned char[ntotaldatabufferlength];
if(!m_pbufferdata)
m_nbuffersize = ntotaldatabufferlength;
m_nbufferemptysize = ntotaldatabufferlength;
m_nbufferreadpos = 0;
m_nbufferwritepos = 0;
m_nframesize = nframesize;
m_nframeemptysize = m_nframesize;
m_nframereadpos = 0;
m_nframewritepos = 0;
m_pallframedata = new framedata[m_nframesize];
for(int j=0; jm_nframereadpos) }
else
else
}return uidifftime;
}//重置幀
void circlebuffer::reset()
else
m_nframeemptysize = m_nframesize - nframenumtmp;
} else
if(m_nlastvideoiframepos != -1 && m_nframereadpos == m_nlastvideoiframepos)
if(m_nlastaudioiframepos != -1 && m_nframereadpos == m_nlastaudioiframepos)
m_nframereadpos++;
if(m_nframereadpos >= m_nframesize)
m_nframeemptysize++;
if(m_nframeemptysize >= m_nframesize)
return 0;
}//寫入一幀資料
int circlebuffer::writeframedata(int nframetype,unsigned char *pframedata,int nframedatalength)
if(m_nbufferemptysize < nframedatalength)
memcpy((void *)&m_pallframedata[m_nframewritepos].ulltimestamp,(void *)pframedata,8);//時間戳
m_pallframedata[m_nframewritepos].nframetype = nframetype;
m_pallframedata[m_nframewritepos].nframedatalength = nframedatalength;
if((m_nbuffersize - m_nbufferwritepos) >= nframedatalength)
else
if(nframetype == frametype_video_iframe)
else if(nframetype == frametype_audio_frame)
m_nframewritepos++;
if(m_nframewritepos >= m_nframesize)
m_nframeemptysize--;
if(m_nframeemptysize <= 0)
if(m_nbufferemptysize <= 0)
return 0;
}
寫入hdfs HDFS讀取和寫入資料簡介
hdfs 的檔案訪問機制為流式訪問機制,即通過 api 開啟檔案的某個資料塊之後,可以順序讀取或者寫入某個檔案。由於 hdfs 中存在多個角色,且對應的應用場景主要為一次寫入 多次讀取的場景,因此其讀和寫的方式有較大不同。讀 寫操作都由客戶端發起,並且由客戶端進行整個流程的控制,namenode 和...
快取資料讀取錯誤
今天遇到乙個問題,在乙個伺服器上里部署了兩套專案程式,資料庫兩份,分別使用30和31的快取,但是出現三種現象,一是登入時取不到快取中的資料,二是乙個專案登入另乙個也登入了,三是乙個專案取到別的專案裡的資料。主要原因是兩個的快取存資料和取資料不一致,例如1 30存,31取 現象一是,專案2 有uid ...
操作型資料儲存區
url 操作型資料儲存區 ods,operational data store 是為了彌補業務系統和資料倉儲之間的資料同步差距而提出的,要解決的問題 對乙個特定的業務流程來說,怎麼才能提供最新的 跨功能部門之 間的資訊 例如對客戶服務人員,他需要銷售 庫存 市場和研發等各部門的最新資料,而這些資料原...