Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поток и sleep()
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
frefik
Привет всем. Как правильно и быстро остановить поток, если в нем используется функция sleep?


void ThreadPlay::run(QList<QTreeWidgetItem *> list)
{
    while(startStop){
        bool status;
        char *fileW;
        QByteArray appDefaultB;
        QString appDefault;
        QProcess process;

        int max = list.count();
        for(int i = 0; i < max; i++){
            if((list.at(i)->checkState(1) == Qt::Checked) && startStop){
                int repeat = list.at(i)->text(6).toInt();
                while(repeat != -1){
                    int saverMin = list.at(i)->text(4).toInt()*60;
                    if(saverMin != 0){
                        status = true;
                        emit saverStatus(status);
                        sleep(saverMin);
                        status = false;
                        emit saverStatus(status);
                    }
                    QString file = list.at(i)->text(7) + "\\" + list.at(i)->text(2);
                    QStringList arguments;
                    arguments.append(file);
                    arguments += list.at(i)->text(5).split(" ");
                    fileW = file.toLocal8Bit().data();
                    appDefaultB.resize(1024*32);
                    FindExecutableA(fileW, NULL, appDefaultB.data());
                    appDefault = appDefaultB;
                    process.start(appDefault, arguments);
                    QTime duration;
                    QTime durationSec;
                    duration = duration.fromString(list.at(i)->text(3), "hh:mm:ss");
                    sleep(durationSec.secsTo(duration));
                    process.close();
                    repeat--;

               }
            }
        }
    }
    exec();
}
RazrFalcon
void QThread::terminate () [slot]

еще можно:
void QThread::quit () [slot]
и
void QThread::exit ( int returnCode = 0 )

Зависит от ситуации.
frefik
всё решилось, создал собственную функцию stop() и булеву переменную, по которой ведется основной цикл.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.