crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Почему не убивается процесс запущенный QProcess?
Rocky
  опции профиля:
сообщение 27.4.2010, 15:45
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Всем привет. Подскажите плиз, как убить процесс когда нужно? Я делаю так
m_pProcess = new QProcess(this);
m_sCommand1 = QString("mplayer %1 -quiet -loop 0");

void CMediaObject::play() const
{
    m_pProcess->start(sCommand.arg(m_sCurrentSource));
}

void CMediaObject::stop() const
{
    if (m_pProcess->state() != QProcess::NotRunning)
    {
        m_pProcess->terminate();
    }
    if (m_pProcess->state() != QProcess::NotRunning)
    {
        m_pProcess->kill();
    }

//вот тут QProcessState все равно Running - проверял
}


Музыка проигрывается... но вот когда нужно все остановить, ниче не получается.... Потому что у меня много раз происходит вызов play/stop и в очередном play при попытке начать процесс заново в консоль получаю "QProcess::start Process is already running". Как это можно исправить? Есть подозрение что убийство происходит не сразу, а через какое-то время, но большее чем 100 мс (потому что вызов play/stop происходит в таймере).


Qt. 4.6.2., ОС Ububntu 9.10.

Спасбо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.4.2010, 18:24
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


приведённый тобою код довольно бессмысленный.
Ты командуешь "Завершить" и ничего не дожидаясь, пытаешься убить процесс.
Смотри:
bool QProcess::waitForFinished ( int msecs = 30000 )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 30.4.2010, 14:17
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


так нет почему бессмысленный? я просто сначала пробую его убить через terminate, а потом типа проверяю и если не убился - то пробую kill.

waitForFinished боюсь не подойдет... Мне нужно грубо говоря запускать процесс каждые 100мс. т.е. на 100-й мс - запустил, на 200-й - убил и тут же запустил заново... И так много раз. А получается что он не убивается совсем мгновенно, в итоге я видимо и получаю QProcess::start Process is already running.... Может сделать 2 процесса типа четный/нечетный? пока один убивается чтоб другой работал и наоборот? К тому же мне ничего нельзя блокировать - там графика отрисовывается, пользователь может думать что программа "подвисает"..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.11.2024, 10:32