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

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

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ Поток и sleep()

Автор: frefik 3.6.2011, 10:59

Привет всем. Как правильно и быстро остановить поток, если в нем используется функция 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 3.6.2011, 12:09

void QThread::terminate () [slot]

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

Зависит от ситуации.

Автор: frefik 4.6.2011, 13:28

всё решилось, создал собственную функцию stop() и булеву переменную, по которой ведется основной цикл.

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