crossplatform.ru

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


  Ответ в Остановка потока
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 18.8.2009, 17:11
  Спасибо. Помогло! :)
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, 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, мьютекс не разблокирован. Как поправить ошибку?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 9:57