class myThread : public QThread
{
private:
int exitCode;
//чего то там
public:
int getExitCode(void) const
{ return exitCode; }
protected:
void run(void)
{
//некоторый код
exitCode = exec();
}
}
Узнать код завершения процесса Qt 4.5
Как узнать код завершения потока в Qt, без черной магии?
Так вроде ж exec() возвращает, то что ему выплевывает exit().
Определитесь кстати процесса или потока. Если процесса то конкретно какая ситуация имеется ввиду.
Определитесь кстати процесса или потока. Если процесса то конкретно какая ситуация имеется ввиду.
Извиняюсь, конечно же потока! а если метод exec(), то есть цикл обработки событий, вообще не вызывался?
Собственно тут и ответ, переопределяйте run и там анализируйте код возврата.
Код:
а если нет? у товарища Schlee в его книге такой вариант использования потоков рассматривается и он прекрасно работает, например если мы в отдельный поток выносим вывод(к примеру логирование чего то большого).
Код:
class myThread : public QThread
{
//....
protected:
void run(void)
{
//некоторый код
}
}
{
//....
protected:
void run(void)
{
//некоторый код
}
}
или я чего то упускаю?
аля
Код:
void run(void)
{
exitCode = -1;
//некоторое условие 1
exitCode = 1; return;
//некоторое условие 2
exitCode = 2; return;
//некоторый код
exitCode = 0;
}
{
exitCode = -1;
//некоторое условие 1
exitCode = 1; return;
//некоторое условие 2
exitCode = 2; return;
//некоторый код
exitCode = 0;
}
другого способа мне не известно.
Цитата: Odissey_
Ну не хотите event loop проталкивайте тогда exitCode сами, аналогично как в вашем первом примере, только заполняйте его по ситуации.
аля
другого способа мне не известно.
аля
Код:
void run(void)
{
exitCode = -1;
//некоторое условие 1
exitCode = 1; return;
//некоторое условие 2
exitCode = 2; return;
//некоторый код
exitCode = 0;
}
{
exitCode = -1;
//некоторое условие 1
exitCode = 1; return;
//некоторое условие 2
exitCode = 2; return;
//некоторый код
exitCode = 0;
}
другого способа мне не известно.
да, я так бы и сделал, но задача стоит если выполенения потока было насильно прервано, если мне не изменяет авмять, методом void exit(int exutCode=0)? как в таком случае узнать код завершения?
для большей надежности можно засунуть инициализацию в конструктор.
Цитата: Odissey_
ну так а на что там в начале стоит exitCode = -1; ?
ну если решить так, то да, это жизниспособный вариант, однако это опять таки магия! должен же быть предусмотрен стандартный способ решения этой проблемы, без колдовста? или же его нет, и библиотека Qt не продумана в этом смысле?
Почему отказываетесь от собственного 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.
Хорошо, спасибо, я узнал все, что хотел!=)