Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Остановка потока

Автор: AD 18.8.2009, 16:50

Есть какой-то код в потоке:

/// Класс параллельного потока для чтения лог-файлов
class RThread: public QThread
{
    Q_OBJECT

// ...........................

private:
    volatile bool stopped;            ///< переменная, контролирующая начало и конец выполнения потока

protected:
    virtual void run();

public:
        void stop() { stopped = true; }
};

void RThread::run()
{
// ..............................
    exec();
}

/// Остановка дополнительного потока
void RThread::stop() { stopped = true; }


В главном потоке хочу остановить
/// Загрузка одного файла
bool TLV::loadFile()
{
    bool result = false;
    if(threadRFile -> isRunning())
    {
        threadRFile -> stop();            ///< oстановка дополнительного потока
        threadRFile -> quit();
        delThread();
        result = readFile();
        visible_tracks = true;
    }
    else
    {
                      /// any
    }
    update();
    return result;
}

По какой-то причине если вызывать функцию quit() программа валится, говоря что какой-то внутренний, в Qt, мьютекс не разблокирован. Как поправить ошибку?

Автор: BRE 18.8.2009, 16:56

Не увидел на что влияет stopped.
Попробуй добавить wait, для того что-бы убедиться что нить завершилась.

/// Загрузка одного файла
bool TLV::loadFile()
{
    bool result = false;
    if(threadRFile -> isRunning())
    {
        threadRFile -> stop();
        threadRFile -> quit();

        threadRFile -> wait();

        delThread();
        result = readFile();
        visible_tracks = true;
    }
    else
    {
                      /// any
    }
    update();
    return result;
}

Автор: AD 18.8.2009, 17:11

Спасибо. Помогло! :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)