crossplatform.ru

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

AD
  опции профиля:
сообщение 4.6.2009, 16:49
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Не понимаю, почему нет паузы в выполнении. Делаю так:
connect(btnPauseVertical, SIGNAL(clicked()), this, SLOT(pauseVerticalCycles()));
/// Приостановка выполнения процесса перемещения в вертикальной проекции (или запуск с места остановки)
void AutoControl::pauseVerticalCycles()
{
    if(btnPauseVertical -> isChecked())
    {
        bool p = vertical -> wait();
        int u = 0;
    }
    /*else
        vertical -> start();*/
}

В чем недочеты? Почему не удается приостановить выполнение функции run()?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
igor_bogomolov
  опции профиля:
сообщение 5.6.2009, 13:00
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Вот простенький пример, как приостановить поток при помощи QMutex & QWaitCondition.

mythread.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QThread>
#include <QMutex>
#include <QWaitCondition>

class myThread : public QThread
{
    Q_OBJECT

    bool pause;
    QMutex mutex;
    QWaitCondition cond;

public:
    myThread(QObject *parent = 0);
    ~myThread();

protected:
    void run();

private slots:
    void togglePaused();
};

#endif // DIALOG_H
mythread.cpp
#include "mythread.h"
#include <QtDebug>

myThread::myThread(QObject *parent)
    : QThread(parent), pause(false)
{

}

myThread::~myThread()
{
}

void myThread::togglePaused()
{
    if (pause) {
        cond.wakeOne();
        pause = false;
    } else {
        pause = true;
    }
}

void myThread::run()
{
    const int Timeout = 3 * 100;
    int count = 0;

    forever {
        while(pause) {
            mutex.lock();
            cond.wait(&mutex);
            mutex.unlock();
        }

        qDebug() << count++;
        msleep(Timeout);
    }
}

main.cpp
#include <QtGui>
#include "mythread.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QDialog dlg;
    QPushButton *pb = new QPushButton("Pause", &dlg);
    QHBoxLayout *hbl = new QHBoxLayout(&dlg);
    hbl->addWidget(pb);
    dlg.setLayout(hbl);

    myThread *thread = new myThread(&dlg);
    QObject::connect(pb, SIGNAL(clicked()), thread, SLOT(togglePaused()));
    thread->start();

    dlg.show();
    return a.exec();
}
.pro
TARGET = pauseThread
TEMPLATE = app
CONFIG += console
SOURCES += main.cpp\
        mythread.cpp
HEADERS  += mythread.h

Прикрепленные файлы
Прикрепленный файл  pauseThread.zip ( 1.53 килобайт ) Кол-во скачиваний: 154
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Приостановка потока   4.6.2009, 16:49
- - BRE   Цитата(AD @ 4.6.2009, 17:49) Не понимаю, ...   4.6.2009, 17:35
|- - AD   Тогда вопрос: как заставить его таймаутиться? Даж...   4.6.2009, 17:37
|- - BRE   Цитата(AD @ 4.6.2009, 18:37) Тогда вопрос...   4.6.2009, 18:02
|- - AD   Ну.... мне удалось сделать такую фишку! Вот ...   4.6.2009, 19:06
- - igor_bogomolov   AD, мне всегда нравились твои краткие примеры Т...   5.6.2009, 0:52
|- - AD   Цитата(igor_bogomolov @ 5.6.2009, 1:52) Е...   5.6.2009, 10:03
- - Litkevich Yuriy   AD, сворачивай код, слишком длинный   5.6.2009, 10:06
- - igor_bogomolov   Цитата(AD @ 5.6.2009, 11:03) 2) условие, ...   5.6.2009, 10:24
|- - AD   Цитата(igor_bogomolov @ 5.6.2009, 11:24) ...   5.6.2009, 10:29
- - igor_bogomolov   Цитата(AD @ 5.6.2009, 11:29) Вот то что н...   5.6.2009, 11:01
|- - AD   Хорошо, quit() убрал. Цитата(igor_bogomolov ...   5.6.2009, 11:29
- - igor_bogomolov   Вот простенький пример, как приостановить поток пр...   5.6.2009, 13:00
- - flankerr   #include <sys/timeb.h> #include <time....   8.6.2009, 13:12
|- - BRE   Цитата(flankerr @ 8.6.2009, 14:12) просто...   8.6.2009, 13:25
- - flankerr   иногда,в тех случаях когда пауза небольшая и загру...   8.6.2009, 14:14
|- - BRE   Цитата(flankerr @ 8.6.2009, 15:14) иногда...   8.6.2009, 15:02
- - Litkevich Yuriy   тему разделил, см. sleep в main'е Всё таки от ...   8.6.2009, 18:19


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 20.7.2025, 14:29