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());