/*! \file pisingleapplication.h * \ingroup Application * \~\brief * \~english Single-instance application control * \~russian Контроль одного экземпляра приложения */ /* PIP - Platform Independent Primitives Single application Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PISINGLEAPPLICATION_H #define PISINGLEAPPLICATION_H #include "pithread.h" class PISharedMemory; //! \ingroup Application //! \~\brief //! \~english Single-instance application control. //! \~russian Контроль одного экземпляра приложения. //! \~\details //! \~english Instances created with the same application name share a channel: //! the first instance listens for messages, later instances can send data to it. //! \~russian Экземпляры, созданные с одинаковым именем приложения, используют //! общий канал: первый экземпляр принимает сообщения, последующие могут //! отправлять ему данные. class PIP_EXPORT PISingleApplication: public PIThread { PIOBJECT_SUBCLASS(PISingleApplication, PIThread); public: //! \~english Constructs %PISingleApplication for application name "app_name". //! \~russian Создает %PISingleApplication для имени приложения "app_name". PISingleApplication(const PIString & app_name = PIString()); //! \~english Stops instance monitoring and releases shared resources. //! \~russian Останавливает мониторинг экземпляра и освобождает общие ресурсы. ~PISingleApplication(); //! \~english Returns whether this process is the first launched instance. //! \~russian Возвращает, является ли этот процесс первым запущенным экземпляром. bool isFirst() const; EVENT_HANDLER1(void, sendMessage, const PIByteArray &, m); EVENT1(messageReceived, PIByteArray, m); //! \handlers //! \{ //! \fn void sendMessage(const PIByteArray & m) //! \brief //! \~english Sends message "m" to the first launched instance. //! \~russian Отправляет сообщение "m" первому запущенному экземпляру. //! \} //! \events //! \{ //! \fn void messageReceived(PIByteArray m) //! \brief //! \~english Raised in the first launched instance when another instance sends a message. //! \~russian Вызывается в первом запущенном экземпляре при получении сообщения от другого экземпляра. //! \} private: void begin() override; void run() override; void waitFirst() const; PISharedMemory * shm; PITimeMeasurer ftm; PIByteArray readed; bool first, started; int sacnt; }; #endif // PISINGLEAPPLICATION_H