crossplatform.ru

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

> Как запустить QThread чтобы он не вешал GUI?
flareguner
  опции профиля:
сообщение 8.3.2010, 17:53
Сообщение #1


Студент
*

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

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




Репутация:   0  


Я пробовал сделать так, как в примере в документации. Унаследовал QThread в классе и переопределил функцию void run(). Затем в другом приложении создал объект этого своего класса и запускаю его. GUI вешается и почти не отзывается. Большое спасибо тем, кто ответит.

Чуть не забыл: в классе наследующем поток мы ждем выполнения QProcess с waitForFinished( -1 ).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
DEADHUNT
  опции профиля:
сообщение 8.3.2010, 21:57
Сообщение #2


Активный участник
***

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

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




Репутация:   2  


Цитата(flareguner @ 8.3.2010, 21:55) *
Подробнее, куда добавить? Может вы имели в виду waitForStarted для объекта process?

да для process, прежде чем ждать его завершения, надо дождаться его запуска(и проверить, запускается ли он вообще).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 8.3.2010, 22:04
Сообщение #3


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

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(DEADHUNT @ 8.3.2010, 21:57) *
Цитата(flareguner @ 8.3.2010, 21:55) *
Подробнее, куда добавить? Может вы имели в виду waitForStarted для объекта process?

да для process, прежде чем ждать его завершения, надо дождаться его запуска(и проверить, запускается ли он вообще).


Не будет разницы никакой:

bool QProcess::waitForFinished(int msecs)
{
    Q_D(QProcess);
    if (d->processState == QProcess::NotRunning)
        return false;
    if (d->processState == QProcess::Starting) {
        QTime stopWatch;
        stopWatch.start();
        bool started = waitForStarted(msecs);
        if (!started)
            return false;
        if (msecs != -1)
            msecs -= stopWatch.elapsed();
    }

    return d->waitForFinished(msecs);
}


После вызова start() QProcess переходит в состояние Starting. Если даже это состояние поменялось на NotRunning в следтвии ошибки, то waitForFinished() об этом сразу увидит, если же мы всё еще в состоянии Starting, то он сам сам вызывает waitForStarted(). Ну и затем waitForFinished(), если всё удачно.

Цитата(flareguner @ 8.3.2010, 22:02) *
Мой код отличался тем, что небыло конструктора и деструктора. Их дописание ничего не изменило( Если это интересно, то в треде должен запускаться mencoder.


Проверь с какой-нибудь другой утилитой. Без QThread вообще код работал или всё написано с нуля без проверок?

Сообщение отредактировал SABROG - 8.3.2010, 22:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- flareguner   Как запустить QThread чтобы он не вешал GUI?   8.3.2010, 17:53
- - SABROG   Я конечно могу задавать наводящие вопросы, типа ...   8.3.2010, 20:01
|- - flareguner   Цитата(SABROG @ 8.3.2010, 20:01) Я конечн...   8.3.2010, 21:17
- - DEADHUNT   QProcess::waitForStarted добавь и посмотри что от ...   8.3.2010, 21:48
|- - flareguner   Цитата(DEADHUNT @ 8.3.2010, 21:48) QProce...   8.3.2010, 21:55
- - SABROG   Не увидел ничего такого, что бы могло вешать GUI. ...   8.3.2010, 21:50
|- - flareguner   Цитата(SABROG @ 8.3.2010, 21:50) Не увиде...   8.3.2010, 22:02
- - DEADHUNT   Цитата(flareguner @ 8.3.2010, 21:55) Подр...   8.3.2010, 21:57
|- - SABROG   Цитата(DEADHUNT @ 8.3.2010, 21:57) Цитата...   8.3.2010, 22:04
||- - flareguner   Цитата(SABROG @ 8.3.2010, 22:04) Цитата(D...   8.3.2010, 22:20
|- - flareguner   Цитата(DEADHUNT @ 8.3.2010, 21:57) Цитата...   8.3.2010, 22:05
- - BRE   Расскажи, что значит "вешается GUI"? Дл...   8.3.2010, 22:07
- - SABROG   BRE прав, тебе нужно определиться, хочешь ли ты во...   8.3.2010, 22:13
- - SABROG   Цитата(flareguner @ 8.3.2010, 22:18) Но с...   8.3.2010, 22:22
- - flareguner   Цитата(SABROG @ 8.3.2010, 22:22) Цитата(f...   8.3.2010, 22:24
- - BRE   А покажи код, который запускает этот поток + как о...   8.3.2010, 22:28
|- - flareguner   Цитата(BRE @ 8.3.2010, 22:28) А покажи ко...   8.3.2010, 22:34
- - SABROG   Проверь управление доходит до строчки идущей за wa...   8.3.2010, 22:29
- - BRE   Так я и думал, новый поток запускается через start...   8.3.2010, 22:35
|- - flareguner   Цитата(BRE @ 8.3.2010, 22:35) Так я и дум...   8.3.2010, 22:44
- - SABROG   Цитата(BRE @ 8.3.2010, 22:35) Так я и дум...   8.3.2010, 22:42
|- - BRE   Цитата(SABROG @ 8.3.2010, 22:42) Если реч...   8.3.2010, 22:46
|- - flareguner   Цитата(BRE @ 8.3.2010, 22:46) Цитата(SABR...   8.3.2010, 22:55
- - flareguner   ЦитатаЧто если запустить mencoder через утилиту ni...   8.3.2010, 22:46
- - SABROG   Всё, нашел: processor->setArguments( sta...   8.3.2010, 22:51
- - DEADHUNT   Цитата(SABROG @ 8.3.2010, 22:51) так как ...   8.3.2010, 22:57
- - SABROG   Цитата(DEADHUNT @ 8.3.2010, 22:57) это уж...   8.3.2010, 23:06
|- - flareguner   Цитата(SABROG @ 8.3.2010, 23:06) Цитата(D...   9.3.2010, 0:01
- - SABROG   Цитата(flareguner @ 9.3.2010, 0:01) вроде...   9.3.2010, 0:18
- - flareguner   Цитата(SABROG @ 9.3.2010, 0:18) Цитата(fl...   9.3.2010, 0:45
- - SABROG   Цитата(flareguner @ 9.3.2010, 0:45) Может...   9.3.2010, 0:56


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


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




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