Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: DenKor29 от Февраль 16, 2016, 13:41



Название: Sleep
Отправлено: DenKor29 от Февраль 16, 2016, 13:41
Код:
// Создание потока
QThread* thread = new QThread;
Worker* worker = new Worker();
 
// Передаем права владения "рабочим" классом, классу QThread.
worker->moveToThread(thread);

 
// Соединяем сигнал started потока, со слотом process "рабочего" класса, т.е. начинается выполнение нужной работы.
connect(thread, SIGNAL(started()), worker, SLOT(process()));


Как лучше из объекта worker приостановить работу потока на определенный период времени ?

QThread::sleep(1000)  в process() ?

Или нужно так работу приоостановить

Код:
QEventLoop loop;
QTimer timer;

timer.setSingleShot(true);
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
connect(manager, SIGNAL(finished()), &loop, SLOT(quit()));
timer.start(1000);
loop.exec();

Тогда будет работать обработка событий в приложении, но код получит управления спустя 1000 мс.



Название: Re: Sleep
Отправлено: Vamireh от Февраль 17, 2016, 12:09
Ну лично я вторым способом делал, например.


Название: Re: Sleep
Отправлено: Igors от Февраль 17, 2016, 15:40
Как лучше из объекта worker приостановить работу потока на определенный период времени ?
sleep усыпляет текущую нитку, вызывается в рабочей, обработка событий приложением (главной ниткой) никак не страдает. Во втором варианте пауза наступит только после завершения process, когда рабочая сможет получить событие. Не уверен что Вас это устроит.


Название: Re: Sleep
Отправлено: DenKor29 от Февраль 18, 2016, 08:23
Наследовался от QThread и сделал вторым способом.
В классе есть объект QWebView и перемещать его в чужую нитку нельзя