From ab7b9e89419848bcd83c6d367c873800b3fa8460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Wed, 31 Aug 2016 11:22:25 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@246 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src/io/pisharedmemory.cpp | 19 +++++++++++++++---- src/io/pisharedmemory.h | 9 +++++++++ src/system/piprocess.cpp | 2 +- src/system/pisingleapplication.h | 2 +- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/io/pisharedmemory.cpp b/src/io/pisharedmemory.cpp index 35aba568..0cc5a6a2 100644 --- a/src/io/pisharedmemory.cpp +++ b/src/io/pisharedmemory.cpp @@ -213,28 +213,39 @@ llong PISharedMemory::size() const { int PISharedMemory::read(void * read_to, int max_size) { + return read(read_to, max_size, 0); +} + + +int PISharedMemory::read(void * read_to, int max_size, int offset) { #ifdef WINDOWS if (!PRIVATE->data) return -1; - CopyMemory(read_to, PRIVATE->data, max_size); + CopyMemory(read_to, &(((char*)(PRIVATE->data))[offset]), max_size); return max_size; #endif #ifdef LINUX if (!PRIVATE->data) return -1; - memcpy(read_to, PRIVATE->data, max_size); + memcpy(read_to, &(((char*)(PRIVATE->data))[offset]), max_size); return max_size; #endif + } int PISharedMemory::write(const void * data, int max_size) { + return write(data, max_size, 0); +} + + +int PISharedMemory::write(const void * data, int max_size, int offset) { #ifdef WINDOWS if (!PRIVATE->data) return -1; - CopyMemory(PRIVATE->data, data, max_size); + CopyMemory(&(((char*)(PRIVATE->data))[offset]), data, max_size); return max_size; #endif #ifdef LINUX if (!PRIVATE->data) return -1; - memcpy(PRIVATE->data, data, max_size); + memcpy(&(((char*)(PRIVATE->data))[offset]), data, max_size); return max_size; #endif } diff --git a/src/io/pisharedmemory.h b/src/io/pisharedmemory.h index b26c1e5f..d64e46c5 100644 --- a/src/io/pisharedmemory.h +++ b/src/io/pisharedmemory.h @@ -51,12 +51,21 @@ public: //! Read from shared memory object to "read_to" no more than "max_size" and return readed bytes count int read(void * read_to, int max_size); + + //! Read from shared memory object to "read_to" no more than "max_size" and return readed bytes count + int read(void * read_to, int max_size, int offset); //! Write to shared memory object "data" with size "max_size" and return written bytes count int write(const void * data, int max_size); + //! Write to shared memory object "data" with size "max_size" and return written bytes count + int write(const void * data, int max_size, int offset); + //! Write "data" to shared memory object int write(const PIByteArray & data) {return write(data.data(), data.size_s());} + + //! Write "data" to shared memory object + int write(const PIByteArray & data, int offset) {return write(data.data(), data.size_s(), offset);} protected: diff --git a/src/system/piprocess.cpp b/src/system/piprocess.cpp index a04e253b..962afe38 100755 --- a/src/system/piprocess.cpp +++ b/src/system/piprocess.cpp @@ -145,7 +145,7 @@ void PIProcess::startProc(bool detached) { 0, // Process handle not inheritable 0, // Thread handle not inheritable false, // Set handle inheritance to FALSE - detached ? DETACHED_PROCESS : 0, // Creation flags + detached ? DETACHED_PROCESS/*CREATE_NEW_CONSOLE*/ : 0, // Creation flags 0,//e, // Use environment wd.isEmpty() ? 0 : wd.data(), // Use working directory &si, // Pointer to STARTUPINFO structure diff --git a/src/system/pisingleapplication.h b/src/system/pisingleapplication.h index 80f45673..45e8906f 100644 --- a/src/system/pisingleapplication.h +++ b/src/system/pisingleapplication.h @@ -24,7 +24,7 @@ class PISharedMemory; -class PIP_EXPORT PISingleApplication: protected PIThread { +class PIP_EXPORT PISingleApplication: public PIThread { PIOBJECT_SUBCLASS(PISingleApplication, PIThread) public: PISingleApplication(const PIString & app_name = PIString());