crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> QThread - quit(), Не выходит из цикла
rnd
  опции профиля:
сообщение 24.10.2009, 19:53
Сообщение #11


Студент
*

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

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




Репутация:   0  


AD, приведите минимальный пример
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Cergey
  опции профиля:
сообщение 25.10.2009, 11:25
Сообщение #12


Студент
*

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

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




Репутация:   1  


Цитата(BRE @ 24.10.2009, 18:17) *
Цитата(AD @ 24.10.2009, 18:09) *
Да кстати, exec() никакие циклы не запускает - проверял!

Ты ошибаешься.

Кто прав???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.10.2009, 11:53
Сообщение #13


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

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

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




Репутация:   94  


Цитата(Cergey @ 25.10.2009, 15:25) *
Кто прав???
Документация, exec() - запускает цикл обработки событий (тык)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rnd
  опции профиля:
сообщение 25.10.2009, 13:48
Сообщение #14


Студент
*

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

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




Репутация:   0  


Кстати, зачем спорить, на то чтобы понять запускает или нет - необходимо 10 сек:
qthread.cpp
int QThread::exec()
{
    Q_D(QThread);
    d->mutex.lock();
    d->data->quitNow = false;
    QEventLoop eventLoop;
    d->mutex.unlock();
    int returnCode = eventLoop.exec();
    return returnCode;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 26.10.2009, 10:46
Сообщение #15


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

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

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




Репутация:   44  


Для удобства можно инкапсулировать все в одном классе:
class ExitFlag
{
public:
    ExitFlag() : m_exit( false ) {}

    void    doExit()
    {
        QMutexLocker lock( m_mutex );
        m_exit = true;
    }
    
    bool isExit() const
    {
        QMutexLocker lock( m_mutex );
        return m_exit;
    }

    operator bool() const
    {
        return isExit();
    }

private:
    mutable QMutex    m_mutex;
    bool            m_exit;
};


использовать этот класс можно примерно так:
class Thread : public QThread
{

public slots:
    void    stop()
    {
        m_exitFlag.doExit();
    }

protected:
    virtual void run()
    {
        while( !m_exitFlag )
        {
            // Долгие вычисления
            if( m_exitFlag.isExit() )
                break;
            // Долгие вычисления
        }
    }

private:
    ExitFlag    m_exitFlag;
};


P.S. Набирал прямо здесь, могут быть опечатки. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 26.10.2009, 11:32
Сообщение #16


Участник
**

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

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




Репутация:   0  


Цитата(SABROG @ 23.10.2009, 23:00) *
Как я понял за всё время существования потоков ничего кроме жестокого убийства потока и if (terminatedFlag) ничего не придумали?

Жесткое убийство потоков, это не правильное решение. Не данный момент, самое правильное решение, это if (terminatedFlag)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.10.2009, 13:11
Сообщение #17


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

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

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




Репутация:   34  


Цитата(niXman @ 26.10.2009, 12:32) *
Жесткое убийство потоков, это не правильное решение.


Правильное/неправильное, а некоторые вещи могут подвесить поток навечно и до проверки флага дело никогда не дойдет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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