30 #include <QCryptographicHash> 31 #include <QMessageBox> 50 , mMemLockKey (generateKeyHash( key,
"_memLockKey" ))
51 , mSharedMemKey (generateKeyHash( key,
"_sharedmemKey"))
52 , mSharedMem (mSharedMemKey)
53 , mMemLock (mMemLockKey, 1)
62 const bool success =
mSharedMem.create(
sizeof( quint64 ) );
125 data.append( key.toUtf8() );
126 data.append( salt.toUtf8() );
127 data = QCryptographicHash::hash( data, QCryptographicHash::Sha1 ).toHex();
160 const bool sharedMemAlreadyExists =
mSharedMem.attach();
161 if (sharedMemAlreadyExists)
mSharedMem.detach();
165 if (sharedMemAlreadyExists and showMessage)
168 msgBox.setWindowTitle(tr(
"Information"));
169 msgBox.setText(tr(
"Just Intonation is already running."));
170 msgBox.setInformativeText(tr(
"Please close the application before restarting."));
171 msgBox.setStandardButtons(QMessageBox::Ok);
172 msgBox.setDefaultButton(QMessageBox::Ok);
173 msgBox.setIcon(QMessageBox::Information);
176 return sharedMemAlreadyExists;
RunGuard(const QString &mKey)
Constructor for a runguard.
QString generateKeyHash(const QString &mKey, const QString &salt)
Generate hash string for a given keys.
void release()
Release the running application.
QSharedMemory mSharedMem
Shared memory labelled by a given key.
~RunGuard()
RunGuard destructor.
bool anotherInstanceIsRunning(bool showMessage=true)
Check whether another instance of the application is running.
QSystemSemaphore mMemLock
Lock used when shared memory is accessed.
const QString mSharedMemKey
Key labelling the shared memory.