git-svn-id: svn://db.shs.com.ru/pip@471 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -54,7 +54,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
//REGISTER_DEVICE(PISharedMemory);
|
||||
REGISTER_DEVICE(PISharedMemory)
|
||||
|
||||
PRIVATE_DEFINITION_START(PISharedMemory)
|
||||
PIByteArray name;
|
||||
@@ -71,7 +71,7 @@ PRIVATE_DEFINITION_END(PISharedMemory)
|
||||
|
||||
PISharedMemory::PISharedMemory(): PIIODevice() {
|
||||
initPrivate();
|
||||
dsize = -1;
|
||||
dsize = 65536;
|
||||
}
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ PISharedMemory::PISharedMemory(const PISharedMemory & other) {
|
||||
|
||||
bool PISharedMemory::openDevice() {
|
||||
close();
|
||||
piCoutObj << "try open" << path() << dsize;
|
||||
#ifdef WINDOWS
|
||||
DWORD m = PAGE_READWRITE;
|
||||
if (!isWriteable()) m = PAGE_READONLY;
|
||||
@@ -100,14 +101,14 @@ bool PISharedMemory::openDevice() {
|
||||
PRIVATE->name.push_back(0);
|
||||
PRIVATE->map = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, m, 0, (DWORD)dsize, (const char *)PRIVATE->name.data());
|
||||
if (!PRIVATE->map) {
|
||||
piCoutObj << "CreateFileMapping error," << errorString();
|
||||
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);
|
||||
if (!PRIVATE->data) {
|
||||
piCoutObj << "MapViewOfFile error," << errorString();
|
||||
piCoutObj << path() << dsize << "MapViewOfFile error," << errorString();
|
||||
CloseHandle(PRIVATE->map);
|
||||
return false;
|
||||
}
|
||||
@@ -166,6 +167,26 @@ bool PISharedMemory::closeDevice() {
|
||||
}
|
||||
|
||||
|
||||
PIString PISharedMemory::constructFullPathDevice() const {
|
||||
PIString ret;
|
||||
ret << path() << ":" << dsize;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void PISharedMemory::configureFromFullPathDevice(const PIString & full_path) {
|
||||
initPrivate();
|
||||
PIStringList pl = full_path.split(":");
|
||||
for (int i = 0; i < pl.size_s(); ++i) {
|
||||
PIString p(pl[i]);
|
||||
switch (i) {
|
||||
case 0: setPath(p); break;
|
||||
case 1: dsize = p.toInt(); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PISharedMemory::initPrivate() {
|
||||
#ifdef WINDOWS
|
||||
PRIVATE->map = 0;
|
||||
|
||||
Reference in New Issue
Block a user