crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Запуск процесса в отдельном треде, Linux only
pashazz
  опции профиля:
сообщение 8.6.2010, 12:18
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 8.6.2010
Пользователь №: 1791

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




Репутация:   0  


Ситуация такая.... я разрабатываю программу winegame (http://winegame-project.ru) и столкнулся с проблемой.
Мне нужно запустить процесс wine так, чтобы GUI не фризился на это время. Это можно сделать с помощью QProcess::startDetached.

НО! мне нужно отследить, когда процесс завершится. Со startDetached это невозможно, поэтому сейчас используется start. А с ним GUI фризится.

Я пытался сделать это на QtConcurrent... примерно так...

void runWine (QProcess *proc, QString comand)
{
proc->start (command);
proc->waitForFinished();
}

void WineProcess:run()
{
process = new QProcess (this);
//блабла, инициализирую QProcess и пр.
watcher->setFuture(QtConcurrent::run (runWine, process, QString ("wine blablabla")));
//присоединяю watcher к QProgressDialog, блабла
}


В итоге получалось так:
1) в консоль сыпалось: cannot create children (0000) for parent (00000) that is in different thread много раз
2)процесс запускался, но в текущем треде
3)после завершения процесса вылезал QProgressDialog, который нужно было отменить....

Как сделать правильно? - вот в чем вопрос.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hkarel
  опции профиля:
сообщение 13.6.2010, 23:14
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 25.5.2009
Пользователь №: 771

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




Репутация:   0  


Почему бы просто не создать поток, в нем запустить процесс и дождаться его окончания?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.4.2024, 13:19