Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка запущенного процесса

5.7K
17 октября 2011 года
Lindemann66
193 / / 21.07.2011
Ещё раз привет всем!

Задача следующая
При запуске программы выполнять проверку
- Если процесс с данным именем уже запущен, показывать предупреждение, и завершать выполнение программы
- Если процес не запущен - продолжать выполнение

Пробовал реализовывать посредством сигналов...
В документации к QProcess написано следующее:
Цитата:

void QProcess::start ( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )

Starts the given program in a new process, if none is already running, passing the command line arguments in arguments. The OpenMode is set to mode.

The QProcess object will immediately enter the Starting state. If the process starts successfully, QProcess will emit started(); otherwise, error() will be emitted. If the QProcess object is already running a process, a warning may be printed at the console, and the existing process will continue running.

Note: Processes are started asynchronously, which means the started() and error() signals may be delayed. Call waitForStarted() to make sure the process has started (or has failed to start) and those signals have been emitted.



Код:
Process::Process() {
    connect(&m_process, SIGNAL(started()),
            this,       SLOT(started())
            );

    connect(&m_process, SIGNAL(error(QProcess::ProcessError)),
            this,       SLOT(error(QProcess::ProcessError))
            );
}

Process::~Process() {

}

void Process::start() {
    m_process.start("ExeText.exe");
    if (!m_process.waitForFinished()) {
        QMessageBox::warning(0, "Error", "Error");
    } else {
        QMessageBox::information(0, "Success", "Success");
    }
}

void Process::started() {
    //QMessageBox::information(0, "Success", "Success");
}

void Process::error(QProcess::ProcessError error) {
    //QMessageBox::warning(0, "Error", "Error");
}


Но это не помогает
Ещё написано про состояние процесса...
Цитата:

When the process exits, QProcess reenters the NotRunning state (the initial state), and emits finished().



Но я это не пробовал...

Что посоветуете, как можно решить эту проблему?
Буду благодарен за любой совет!

277
17 октября 2011 года
arrjj
1.7K / / 26.01.2011
winapi, кроссплатформенного/Qt решения нет. И кто сказал что с таким именем будет только твой процесс?
5.7K
17 октября 2011 года
Lindemann66
193 / / 21.07.2011
Это да. Но такая проблема всё же есть, возможно, её нужно будет решать, поэтому я узнаю заранее..
5.7K
17 октября 2011 года
Lindemann66
193 / / 21.07.2011
Большое спасибо! :)
277
17 октября 2011 года
arrjj
1.7K / / 26.01.2011
Ещё можешь вместо именованного мютекса использовать QSystemSemaphore
5.7K
17 октября 2011 года
Lindemann66
193 / / 21.07.2011
По идее, QtSingleApplication - как раз то, что нужно
Кстати, не знаешь, QtSingleApplication кроссплатформенная?
277
17 октября 2011 года
arrjj
1.7K / / 26.01.2011
кроссплатформенная
5.7K
17 октября 2011 года
Lindemann66
193 / / 21.07.2011
шикарно, тем более, что уже использую эту библиотеку)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог