Files
pip/libs/main/application/pisingleapplication.h
2026-03-07 17:00:45 +03:00

95 lines
3.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*! \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 <http://www.gnu.org/licenses/>.
*/
#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