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

This commit is contained in:
2016-08-31 11:22:25 +00:00
parent 4a419c98a9
commit ab7b9e8941
4 changed files with 26 additions and 6 deletions

View File

@@ -213,28 +213,39 @@ llong PISharedMemory::size() const {
int PISharedMemory::read(void * read_to, int max_size) { 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 #ifdef WINDOWS
if (!PRIVATE->data) return -1; if (!PRIVATE->data) return -1;
CopyMemory(read_to, PRIVATE->data, max_size); CopyMemory(read_to, &(((char*)(PRIVATE->data))[offset]), max_size);
return max_size; return max_size;
#endif #endif
#ifdef LINUX #ifdef LINUX
if (!PRIVATE->data) return -1; if (!PRIVATE->data) return -1;
memcpy(read_to, PRIVATE->data, max_size); memcpy(read_to, &(((char*)(PRIVATE->data))[offset]), max_size);
return max_size; return max_size;
#endif #endif
} }
int PISharedMemory::write(const void * data, int max_size) { 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 #ifdef WINDOWS
if (!PRIVATE->data) return -1; if (!PRIVATE->data) return -1;
CopyMemory(PRIVATE->data, data, max_size); CopyMemory(&(((char*)(PRIVATE->data))[offset]), data, max_size);
return max_size; return max_size;
#endif #endif
#ifdef LINUX #ifdef LINUX
if (!PRIVATE->data) return -1; if (!PRIVATE->data) return -1;
memcpy(PRIVATE->data, data, max_size); memcpy(&(((char*)(PRIVATE->data))[offset]), data, max_size);
return max_size; return max_size;
#endif #endif
} }

View File

@@ -51,12 +51,21 @@ public:
//! Read from shared memory object to "read_to" no more than "max_size" and return readed bytes count //! 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 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 //! Write to shared memory object "data" with size "max_size" and return written bytes count
int write(const void * data, int max_size); 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 //! Write "data" to shared memory object
int write(const PIByteArray & data) {return write(data.data(), data.size_s());} 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: protected:

View File

@@ -145,7 +145,7 @@ void PIProcess::startProc(bool detached) {
0, // Process handle not inheritable 0, // Process handle not inheritable
0, // Thread handle not inheritable 0, // Thread handle not inheritable
false, // Set handle inheritance to FALSE 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 0,//e, // Use environment
wd.isEmpty() ? 0 : wd.data(), // Use working directory wd.isEmpty() ? 0 : wd.data(), // Use working directory
&si, // Pointer to STARTUPINFO structure &si, // Pointer to STARTUPINFO structure

View File

@@ -24,7 +24,7 @@
class PISharedMemory; class PISharedMemory;
class PIP_EXPORT PISingleApplication: protected PIThread { class PIP_EXPORT PISingleApplication: public PIThread {
PIOBJECT_SUBCLASS(PISingleApplication, PIThread) PIOBJECT_SUBCLASS(PISingleApplication, PIThread)
public: public:
PISingleApplication(const PIString & app_name = PIString()); PISingleApplication(const PIString & app_name = PIString());