📄 sh_smem.h
字号:
// SH_SMem.h: interface for the SH_SMem class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SH_SSH_SMEM_H__B77CEA49_6230_4EA4_AB92_E6A019676B7E__INCLUDED_)
#define AFX_SH_SSH_SMEM_H__B77CEA49_6230_4EA4_AB92_E6A019676B7E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "SH_Object.h"
class AFX_EXT_CLASS SH_SMem : public SH_Object
{
public:
class SH_WriteQue
{
public:
SH_WriteQue(int nDataSize)
{
pData = new BYTE[nDataSize];
pNext = NULL;
};
~SH_WriteQue()
{
delete [] pData;
};
void *pData;
SH_WriteQue *pNext;
};
public:
enum
{
SH_SMEM_ERROR_UNKNOWN = -1,
SH_SMEM_SUCCESS = 0,
SH_SMEM_ERROR_CLOSED = 1,
SH_SMEM_ERROR_TIMEOUT = 2,
SH_SMEM_ERROR_OTHERPARTY = 3,
SH_SMEM_ERROR_DATASIZE = 4
};
SH_SMem();
~SH_SMem();
BOOL Open( const char* sName, int nDataSize, int nTimeOut = INFINITE);
void Close();
int Write(void *pData, int nDataSize, DWORD dwTimeOut);
int WriteToQueue(void *pData, int nDataSize);
int Read(void *pData, int nDataSize, DWORD dwTimeOut);
private:
void EmptyWriteQueue();
static void QueueThread(void *pArg);
private:
HANDLE m_hSMemMutex[2];
int m_nInstanceID;
int m_nOtherInstanceID;
HANDLE m_hSMem[2];
BYTE* m_pSMem[2];
int* m_pSize;
HANDLE m_hClosed;
HANDLE m_hDataWrit[2];
HANDLE m_hDataRead[2];
HANDLE m_hSecondInstanceAvailable;
HANDLE m_hQueueThread;
HANDLE m_hDataInQueue;
SH_WriteQue *m_pFirst;
HANDLE m_hQueueMutex;
};
#endif // !defined(AFX_SH_SSH_SMEM_H__B77CEA49_6230_4EA4_AB92_E6A019676B7E__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -