Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Остановка потока
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
AD
Есть какой-то код в потоке:
/// Класс параллельного потока для чтения лог-файлов
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
Не увидел на что влияет 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
Спасибо. Помогло! :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.