crossplatform.ru

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


  Ответ в Поток и sleep()
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
frefik Дата 4.6.2011, 13:28
  всё решилось, создал собственную функцию stop() и булеву переменную, по которой ведется основной цикл.
RazrFalcon Дата 3.6.2011, 12:09
  void QThread::terminate () [slot]

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

Зависит от ситуации.
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();
}
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.9.2022, 17:54