crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> threads в классах Qt
Digger86
  опции профиля:
сообщение 18.10.2012, 17:46
Сообщение #1


Студент
*

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

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




Репутация:   0  


Добрый день!
Существует ли возможность того, что Qt сам создаёт какие-то нити, при использовании его классов? Т.е. есть ли гарантия того, что Qt классы (кроме QThread разумеется) не создают каких-либо нитей? А если всё-таки какие-то создают, то какие именно и где об этом можно почитать.
Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 18.10.2012, 19:02
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Теоретически нет.

Создавать можно через эти классы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Digger86
  опции профиля:
сообщение 18.10.2012, 19:40
Сообщение #3


Студент
*

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

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




Репутация:   0  


Спасибо!
В общем я так и думал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2012, 7:16
Сообщение #4


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

Группа: Участник
Сообщений: 2931
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Digger86, а почему такой вопрос возник ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Digger86
  опции профиля:
сообщение 19.10.2012, 10:13
Сообщение #5


Студент
*

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

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




Репутация:   0  


Потому что при использовании моей библиотеки, которая использует классы Qt, возникают 2 дополнительных процесса (видны в менеджере процессов). Как выяснилось они появляются после использования функции bool QProcess::startDetached(). Не совсем ясно как сделать так чтобы они не появлялись. Мне просто необходимо запустить программу, без всякой дальнейшей связи с ней.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2012, 10:40
Сообщение #6


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

Группа: Участник
Сообщений: 2931
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Digger86, давай уже определимся, речь про процессы или про потоки ?

И код покажи, что ты делаешь для того, чтобы
Цитата
необходимо запустить программу, без всякой дальнейшей связи с ней.

И что должно стать с родительским процессом после запуска дочернего ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Digger86
  опции профиля:
сообщение 19.10.2012, 10:58
Сообщение #7


Студент
*

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

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




Репутация:   0  


чтобы запустить программу я делаю следующее
QString program("/bin/myProgram");
QStringList arguments <<"my" <<"arguments";
QProcess::startDetached(program, arguments);

После этого у меня стартует myProgram, но при этом в вызывающем процессе образуются дополнительные потоки.
Родительский процесс после вызова QProcess::startDetached(program, arguments) должен продолжить своё выполнение, как-будто ничего не произошло.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2012, 11:49
Сообщение #8


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

Группа: Участник
Сообщений: 2931
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


может быть, всё дело в том, что startDetached вертает дескриптор нового процесса - и что-то там требуется для этого . Попробуй вариант start()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Digger86
  опции профиля:
сообщение 19.10.2012, 14:02
Сообщение #9


Студент
*

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

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




Репутация:   0  


К сожалению через, если использовать start(), то тоже создаются дополнительные потоки (я так понимаю их создаёт QProcessManager, который следит за дочерними процессами). Проблем добавляет тот факт, что моя библиотека должна использоваться вне Qt окружения.. То есть нет гарантии того, что имеется QCoreApplication.
В итоге реализовал запуск программы следующим образом:
int fork_rv = fork();
if (fork_rv == 0){
    fork_rv = fork();
    if (fork_rv == 0)    {
        // we're in the child
        execl("/path/to/myProgram", "myProgram", "arg1", 0);
         // if execl fails
        _exit(1);
    }
    else if (fork_rv == -1)    {
        // fork fails
        _exit(2);
    }
    _exit(0);
}
else if (fork_rv != -1){
    // parent wait for the child (which will exit quickly)
    int status;
    waitpid(fork_rv, &status, 0);
}
else if (fork_rv == -1){
    // error could not fork
}

взял отсюда:
http://stackoverflow.com/questions/486087/...with-parameters
Конечно это не кроссплатформенное решение, но хотя бы работает..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 30.6.2022, 23:39