git-svn-id: svn://db.shs.com.ru/pip@480 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2017-04-28 08:43:36 +00:00
parent 0c2fd6985a
commit 54d40653cb
5 changed files with 26 additions and 32 deletions

View File

@@ -83,30 +83,24 @@ PISharedMemory::PISharedMemory(const PIString & shm_name, int size, PIIODevice::
}
PISharedMemory::PISharedMemory(const PISharedMemory & other) {
initPrivate();
dsize = other.dsize;
setPath(other.path());
mode_ = other.mode_;
}
bool PISharedMemory::openDevice() {
close();
piCoutObj << "try open" << path() << dsize;
#ifdef WINDOWS
DWORD m = PAGE_READWRITE;
if (!isWriteable()) m = PAGE_READONLY;
PRIVATE->name = ("PIP_SHM_" + path()).toByteArray();
PRIVATE->name.push_back(0);
PRIVATE->map = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, m, 0, (DWORD)dsize, (const char *)PRIVATE->name.data());
const char * nm = (const char *)PRIVATE->name.data();
PRIVATE->map = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, nm);
//piCoutObj << "open map =" << ullong(PRIVATE->map);
if (!PRIVATE->map) {
piCoutObj << path() << dsize << "CreateFileMapping error," << errorString();
return false;
PRIVATE->map = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, (DWORD)dsize, nm);
//piCoutObj << "create map =" << ullong(PRIVATE->map);
if (!PRIVATE->map) {
piCoutObj << path() << dsize << "CreateFileMapping error," << errorString();
return false;
}
}
if (!isWriteable()) m = FILE_MAP_READ;
else m = FILE_MAP_ALL_ACCESS;
PRIVATE->data = MapViewOfFile(PRIVATE->map, m, 0, 0, dsize);
PRIVATE->data = MapViewOfFile(PRIVATE->map, FILE_MAP_ALL_ACCESS, 0, 0, dsize);
if (!PRIVATE->data) {
piCoutObj << path() << dsize << "MapViewOfFile error," << errorString();
CloseHandle(PRIVATE->map);
@@ -209,20 +203,6 @@ PIByteArray PISharedMemory::readAll() {
#endif
PIByteArray a(dsize);
read(a.data(), a.size_s());
/*llong cp = pos();
if (forceRead) {
seekToBegin();
while (!isEnd())
a.push_back(readChar());
seek(cp);
return a;
}
llong s = size();
if (s < 0) return a;
a.resize(s);
s = readAll(a.data());
seek(cp);
if (s >= 0) a.resize(s);*/
return a;
}
@@ -233,6 +213,14 @@ llong PISharedMemory::size() const {
}
void PISharedMemory::setSize(llong s) {
bool o = isOpened();
if (o) close();
dsize = s;
if (o) open();
}
int PISharedMemory::read(void * read_to, int max_size) {
return read(read_to, max_size, 0);
}