crossplatform.ru

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

> Вопрос по вызову QProcess ?
AntonTatu
  опции профиля:
сообщение 16.3.2009, 12:07
Сообщение #1


Студент
*

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

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




Репутация:   0  


Всем привет!

Возникла необходимость вызывать из одной программы другую, вот такой код не работает, как правильно ?

QProcess myProc;
myProc.start ("C:\1.exe");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 16.3.2009, 12:08
Сообщение #2


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

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

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




Репутация:   94  


Цитата(AntonTatu @ 16.3.2009, 15:07) *
\1
слэш в языке С++ имеет специальный смысл, либо пиши
C:/1.exe
либо
C:\\1.exe
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 16.3.2009, 12:27
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 16.3.2009, 12:08) *
Цитата(AntonTatu @ 16.3.2009, 15:07) *
\1
слэш в языке С++ имеет специальный смысл, либо пиши
C:/1.exe
либо
C:\\1.exe


да как я уже только не писал :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.3.2009, 12:38
Сообщение #4


Профессионал
*****

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

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




Репутация:   44  


Цитата(AntonTatu @ 16.3.2009, 12:27) *
да как я уже только не писал :(

А что пишет? Что QProcess::error() возвращает?

А ты случаем не так вызываешь?
void func()
{
    QProcess myProc;
    myProc.start ("C:\1.exe");
}


А то при выходе из функции, процесс 1.exe будет убит, не успев запуститься.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 16.3.2009, 13:15
Сообщение #5


Студент
*

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

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




Репутация:   0  


Цитата(BRE @ 16.3.2009, 12:38) *
Цитата(AntonTatu @ 16.3.2009, 12:27) *
да как я уже только не писал :(

А что пишет? Что QProcess::error() возвращает?

А ты случаем не так вызываешь?
void func()
{
    QProcess myProc;
    myProc.start ("C:\1.exe");
}


А то при выходе из функции, процесс 1.exe будет убит, не успев запуститься.


ну вобщем да.... , а как же мне его тогда вызывать ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.3.2009, 13:21
Сообщение #6


Профессионал
*****

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

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




Репутация:   44  


Цитата(AntonTatu @ 16.3.2009, 13:15) *
ну вобщем да.... , а как же мне его тогда вызывать ?

А ты QProcess не на стеке создавай:
QProcess *p = new QProcess(...);
p->start( ... );

Только после завершения процесса, не забывай объект удалить.

или, если надо, дожидайся завершения процесса в функции:

bool QProcess::waitForFinished ( int msecs = 30000 )

void func()
{
    QProcess myProc;
    myProc.start ("C:\1.exe");
    myProc.waitForFinished();
}


Сообщение отредактировал BRE - 16.3.2009, 13:25
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 16.3.2009, 16:24
Сообщение #7


Студент
*

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

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




Репутация:   0  


Цитата(BRE @ 16.3.2009, 13:21) *
Только после завершения процесса, не забывай объект удалить.
или, если надо, дожидайся завершения процесса в функции:
bool QProcess::waitForFinished ( int msecs = 30000 )
void func()
{
    QProcess myProc;
    myProc.start ("C:\1.exe");
    myProc.waitForFinished();
}


в общем копался копался докапался:
QProcess myProc;
QStringList Arg;
Arg << "/c mybat.bat";
myProc.startDetached("cmd.exe",Arg,Catalog); //запускаю батник в нужной папке через cmd.exe
myProc.waitForFinished();


только почему то задержка myProc.waitForFinished(); не работает... почему ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.3.2009, 16:55
Сообщение #8


Профессионал
*****

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

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




Репутация:   44  


Цитата(AntonTatu @ 16.3.2009, 16:24) *
в общем копался копался докапался:
QProcess myProc;
QStringList Arg;
Arg << "/c mybat.bat";
myProc.startDetached("cmd.exe",Arg,Catalog); //запускаю батник в нужной папке через cmd.exe
myProc.waitForFinished();


только почему то задержка myProc.waitForFinished(); не работает... почему ?

Что значит не работает, сразу выходит?
Так это потому, что ты процесс отделяешь (detach).
После выполнения myProc.startDetached процесс начинает жить своей жизнью. Даже если ты закроешь программу запустившую процесс, процесс будет работать дальше.
Для таких процессов можно не ждать его завершения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AntonTatu   Вопрос по вызову QProcess ?   16.3.2009, 12:07
- - Litkevich Yuriy   Цитата(AntonTatu @ 16.3.2009, 15:07) ...   16.3.2009, 12:08
|- - AntonTatu   Цитата(Litkevich Yuriy @ 16.3.2009, 12:08...   16.3.2009, 12:27
|- - BRE   Цитата(AntonTatu @ 16.3.2009, 12:27) да к...   16.3.2009, 12:38
|- - AntonTatu   Цитата(BRE @ 16.3.2009, 12:38) Цитата(Ant...   16.3.2009, 13:15
|- - BRE   Цитата(AntonTatu @ 16.3.2009, 13:15) ну в...   16.3.2009, 13:21
|- - AntonTatu   Цитата(BRE @ 16.3.2009, 13:21) Только пос...   16.3.2009, 16:24
|- - BRE   Цитата(AntonTatu @ 16.3.2009, 16:24) в об...   16.3.2009, 16:55
- - kwisp   Цитата(AntonTatu @ 16.3.2009, 12:27) да к...   16.3.2009, 12:35
- - Litkevich Yuriy   BRE, AntonTatu, не цитируйте целыми сообщениями, к...   16.3.2009, 17:58
- - DEADHUNT   arg = QStringList() << "/c...   3.10.2009, 17:28
- - kwisp   DEADHUNT, а почему должна оставаться? "conso...   3.10.2009, 17:32
- - DEADHUNT   работа не была завершенна, в скрипте же есть pause...   3.10.2009, 17:34
- - kwisp   почему не хочешь так? arg = QStringList() ...   3.10.2009, 17:38
- - DEADHUNT   также работает(calc запускается), но консоль не по...   3.10.2009, 17:45
- - kwisp   DEADHUNT, мож настройки винды такие. а примерчика...   3.10.2009, 17:47
- - DEADHUNT   примерчик очень большой(не один десяток файлов), с...   3.10.2009, 18:10
- - kwisp   DEADHUNT, да start запускает консоль(в процессах ...   3.10.2009, 18:14
- - DEADHUNT   выход только WinAPI и условную компиляцию использо...   3.10.2009, 18:19
- - Litkevich Yuriy   DEADHUNT, командная строка может захлопнутся, если...   3.10.2009, 18:43
- - kwisp   DEADHUNT, я запустил так QStringList s; proc.star...   3.10.2009, 18:49
- - DEADHUNT   спасибо, но всётаки интересно как же тогда VS дела...   3.10.2009, 18:54
- - kwisp   это тебе надо к знатокам винды:) сомневаюсь, это н...   3.10.2009, 18:58
- - DEADHUNT   Цитата(kwisp @ 3.10.2009, 19:58) баг это ...   3.10.2009, 19:08


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


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




RSS Текстовая версия Сейчас: 28.12.2024, 4:50