我有两个函数,一个套接字接受函数,将接收到的数据写入内存缓冲区。另外一个函数在读取并修改同样的内存缓冲,如何实现共享内存缓冲,而不产生冲突。我的代码简略如下:
void CClientSocket::OnReceive(int nErrorCode)
{
//......
//读套节子数据,写入缓冲
iRead = pClientSocket->Receive(g_lpBuf,0x8fff,0);
pMYView->TTYGetInfoReceived(this);
//......
}void CMYView::TTYGetInfoReceived(CClientSocket *pClientSocket)
{
char lpBuf[0x1000];
//下面的代码将修改内存缓冲区g_lpBuf
//.........
}我希望数据不断的由套节子读入,写到内存缓冲,又不断的被保存到文件中。
void CClientSocket::OnReceive(int nErrorCode)
{
//......
//读套节子数据,写入缓冲
iRead = pClientSocket->Receive(g_lpBuf,0x8fff,0);
pMYView->TTYGetInfoReceived(this);
//......
}void CMYView::TTYGetInfoReceived(CClientSocket *pClientSocket)
{
char lpBuf[0x1000];
//下面的代码将修改内存缓冲区g_lpBuf
//.........
}我希望数据不断的由套节子读入,写到内存缓冲,又不断的被保存到文件中。
#include <afxmt.h>
class CClientSocket
{
...
//增加成员变量
CCriticalSection m_cs;
};
void CClientSocket::OnReceive(int nErrorCode)
{
//......
//读套节子数据,写入缓冲
m_cs.Lock();
iRead = pClientSocket->Receive(g_lpBuf,0x8fff,0);
m_cs.UnLock();
pMYView->TTYGetInfoReceived(this);
//......
}
void CMYView::TTYGetInfoReceived(CClientSocket *pClientSocket)
{
char lpBuf[0x1000];
m_cs.Lock();
//下面的代码将修改内存缓冲区g_lpBuf
//.........
m_cs.Unlock();
}
用CreateEvent()创建一个AutoReset的事件
ThreadReceiveProc()
{
WaitForSingleObject();
Receive();
SetEvent();
}ThreadSave()
{
WaitForSingleObject();
SaveToFile();
SetEvent();
}
void InitializeCriticalSection(
LPCRITICAL_SECTION lpCriticalSection );
void EnterCriticalSection(
LPCRITICAL_SECTION lpCriticalSection );
void LeaveCriticalSection(
LPCRITICAL_SECTION lpCriticalSection );
void DeleteCriticalSection(
LPCRITICAL_SECTION lpCriticalSection ); MainThread
{
InitializeCriticalSection;
CreateThread;
.
.
.
EnterCriticalSection;
.
.
.
LeaveCriticalSection;
.
.
.
DeleteCriticalSection
}
ThreadProc
{
.
EnterCriticalSection;
.
.
.
LeaveCriticalSection;
.
}
using namespace std;class C
{
public:
int nVar;
};char *pBuf = new char[1024];void main()
{
C *po = new(pBuf)C; // 在pBuf内存中为po申请内存
po->nVar=6;
cout<<po->nVar;
// delete po; // 这句并不需要
delete []pBuf; // 在这句里统一释放内存
}这就是你们想要的Memory pool ??