Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Узнать код завершения процесса Qt 4.5

307
16 октября 2009 года
Artem_3A
863 / / 11.04.2008
День добрый.
Как узнать код завершения потока в Qt, без черной магии?
361
16 октября 2009 года
Odissey_
661 / / 19.09.2006
Так вроде ж exec() возвращает, то что ему выплевывает exit().

Определитесь кстати процесса или потока. Если процесса то конкретно какая ситуация имеется ввиду.
307
16 октября 2009 года
Artem_3A
863 / / 11.04.2008
Извиняюсь, конечно же потока! а если метод exec(), то есть цикл обработки событий, вообще не вызывался?
361
16 октября 2009 года
Odissey_
661 / / 19.09.2006
Эм, то есть не вызывался? Если не переопределяете run, то он по умолчанию это обертка для exec. Если переопределяете то там он должен быть =)

Собственно тут и ответ, переопределяйте run и там анализируйте код возврата.
307
16 октября 2009 года
Artem_3A
863 / / 11.04.2008
допустим если мы исользуем цикл обработки событий, то все просто:
Код:
class myThread : public QThread
{
private:
    int exitCode;
//чего то там
public:
    int getExitCode(void) const
    { return exitCode;   }
protected:
   void run(void)
   {
    //некоторый код
       exitCode = exec();
   }
}


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

 
Код:
class myThread : public QThread
{
//....
protected:
   void run(void)
   {
    //некоторый код
   }
}


или я чего то упускаю?
361
16 октября 2009 года
Odissey_
661 / / 19.09.2006
Ну не хотите event loop проталкивайте тогда exitCode сами, аналогично как в вашем первом примере, только заполняйте его по ситуации.
аля

Код:
void run(void)
   {
       exitCode = -1;
    //некоторое условие  1
       exitCode = 1; return;
    //некоторое условие  2
       exitCode = 2; return;

    //некоторый код
       exitCode = 0;
   }


другого способа мне не известно.
307
16 октября 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: Odissey_
Ну не хотите event loop проталкивайте тогда exitCode сами, аналогично как в вашем первом примере, только заполняйте его по ситуации.
аля

Код:
void run(void)
   {
       exitCode = -1;
    //некоторое условие  1
       exitCode = 1; return;
    //некоторое условие  2
       exitCode = 2; return;

    //некоторый код
       exitCode = 0;
   }


другого способа мне не известно.



да, я так бы и сделал, но задача стоит если выполенения потока было насильно прервано, если мне не изменяет авмять, методом void exit(int exutCode=0)? как в таком случае узнать код завершения?

361
16 октября 2009 года
Odissey_
661 / / 19.09.2006
ну так а на что там в начале стоит exitCode = -1; ?

для большей надежности можно засунуть инициализацию в конструктор.
307
16 октября 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: Odissey_
ну так а на что там в начале стоит exitCode = -1; ?



ну если решить так, то да, это жизниспособный вариант, однако это опять таки магия! должен же быть предусмотрен стандартный способ решения этой проблемы, без колдовста? или же его нет, и библиотека Qt не продумана в этом смысле?

361
16 октября 2009 года
Odissey_
661 / / 19.09.2006
Я чего то недопонимаю.

Почему отказываетесь от собственного event loop у потока?
Если вы насильно вызываете exit, зачем вам знать код возврата? Тем более что в мануале написано про exit что This function does nothing if the thread does not have an event loop, у меня нет под рукой Qt4.5, есть 3.3 там работа с потоками немного отличается и кстати вообще не предусмторено такого понятия как код возврата. То что вы щас называете магией вполне обычный вариант. Проверьте будет ли exit пахать без event loop в вашем Qt.
307
17 октября 2009 года
Artem_3A
863 / / 11.04.2008
Хорошо, спасибо, я узнал все, что хотел!=)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог