git-svn-id: svn://db.shs.com.ru/pip@480 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user