crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Поток и sleep()
frefik
  опции профиля:
сообщение 3.6.2011, 10:59
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 30.5.2011
Пользователь №: 2706

Спасибо сказали: 0 раз(а)




Репутация:   0  


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


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


void QThread::terminate () [slot]

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

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

Сообщение отредактировал RazrFalcon - 3.6.2011, 12:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frefik
  опции профиля:
сообщение 4.6.2011, 13:28
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 30.5.2011
Пользователь №: 2706

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 5:54