写数据线初始化:
1、初始化
bool MainWindow::init()
{
_sharMemory.setKey("thiskeys");
if (_sharMemory.isAttached())
{
// 将该进程与共享内存段分离
if (!_sharMemory.detach())
qDebug() << "Unable to detach from shared memory.";
}
if(!_sharMemory.create(4096)) //4096的整数倍
{
qDebug() << _sharMemory.errorString() <<endl;
return false;
}
if(!_sharMemory.lock())
{
qDebug()<<"_sharMemory.lock() false";
return false;
}
char * from=(char *)_sharMemory.data();
memset(from,0,_sharMemory.size());
_sharMemory.unlock();
return true;
}
2、写数据
//写数据
_sharMemory.lock();
char *dest = reinterpret_cast<char *>(_sharMemory.data());
QString source = "x:58888888888888888888888;y:454565.11";
memcpy(dest,source.toLocal8Bit().data(),qMin(_sharMemory.size(),source.size()));
qDebug()<< "writdata:"<< QString::fromLocal8Bit(dest)<<endl;
_sharMemory.unlock();
读数据,不需要初始化
void MainWindow::timerEvent(QTimerEvent *event)
{
_sharMemory.setKey("thiskeys");
_sharMemory.attach();
//读数据
QBuffer buffer;
_sharMemory.lock();
buffer.setData((char*)_sharMemory.constData(),_sharMemory.size());
buffer.open(QBuffer::ReadWrite);
buffer.readAll();
//读完数据就清空
char * from=(char *)_sharMemory.data();
memset(from,0,_sharMemory.size());
_sharMemory.unlock();
qDebug()<< "reddata:"<<QString::fromLocal8Bit(buffer.data().data()) <<endl;
_sharMemory.detach();
}
转载:https://blog.youkuaiyun.com/qq_35241071/article/details/103877650