Задача сделать глобальный признак того, что приложение уже запущено.
У меня два исполнения одной и той же реализации: одна в виде QtService, другая в виде консоли.
Подсмотрел следующий код:
bool Worker::isJobAlreadyRunning()
{
QSystemSemaphore sema("1", 1);
sema.acquire();
bool isRunning = false;
_shmem.setKey("2");
if (_shmem.attach())
isRunning = true;
else
_shmem.create(1);
sema.release();
return isRunning;
}
void Worker::start()
{
if ( isJobAlreadyRunning() )
{
qCritical() << trUtf8("Job is already running in other application. Cannot run a duplicate job!");
return;
}
...
}
для нескольких консольных исполнений работает нормально,
а вот сервис разделяемый кусок памяти не видит и продолжает работать при запущенной консоли. И наоборот - консоль не ведает о занятом куске памяти сервиса