window API一天一练之共享内存(二)
m_pMemory = NULL;
cleanHandle();
return true;
}
void WinSharedMemory::cleanHandle()
{
if (m_fileMapping)
{
CloseHandle(m_fileMapping);
m_fileMapping = NULL;
}
if (m_mutex)
{
CloseHandle(m_mutex);
m_mutex = NULL;
}
}
Qt的测速程序代码:
[html]
SharedMemory::SharedMemory(QWidget *parent, Qt::WFlags flags)
: QDialog(parent, flags)
{
m_pWriteDataBtn = new QPushButton(tr("WriteData"),this);
m_pReadDataBtn = new QPushButton(tr("ReadData"),this);
m_pTextEdit = new QTextEdit(this);
connect(m_pReadDataBtn,SIGNAL(clicked()),this,SLOT(ReadDataFromMemorySlot()));
connect(m_pWriteDataBtn,SIGNAL(clicked()),this,SLOT(WriteDataToMemorySlot()));
//ui.setupUi(this);
}
SharedMemory::~SharedMemory()
{
}
void SharedMemory::ReadDataFromMemorySlot()
{
int size = 1024 * 1024 ;
WinSharedMemory sharedMemory;
sharedMemory.Setkey("FileMapObject");
if (sharedMemory.IsAttach())
sharedMemory.Detach();
}
sharedMemory.CreateSize(size);
sharedMemory.Attach();
sharedMemory.Lock();
char *pmemory = (char*)sharedMemory.Data();
char *pText = new char[size];
strcpy(pText,pmemory);
sharedMemory.UnLock();
sharedMemory.Detach();
m_pTextEdit->setText(QString::fromStdString(pText));
}
void SharedMemory::WriteDataToMemorySlot()
{
int size = 1024 * 1024 ;
WinSharedMemory sharedMemory;
sharedMemory.Setkey("FileMapObject");
if (sharedMemory.IsAttach())
{
sharedMemory.Detach();
}
sharedMemory.CreateSize(size);
sharedMemory.Attach();
sharedMemory.Lock();
char *pmemory = (char*)sharedMemory.Data();
string text = m_pTextEdit->toPlainText().toStdString();
strcpy(pmemory,text.c_str());
sharedMemory.UnLock();
}
void SharedMemory::resizeEvent( QResizeEvent *event )
{
this->setFixedSize(QSize(500,300));
m_pReadDataBtn->setGeometry(0,0,100,20);
m_pReadDataBtn->setGeometry(120,0,100,20);
m_pTextEdit->setGeometry(0,25,500,270);
}