Всем доброго времени суток
До этого никогда потоками не пользовался(аж стыдно)
Поток производит очень долгое мат статистическое вычисление
с приоритетом QThread::IdlePriority, т.к. скорости от меня никто не просил
По времени пару минут, но это нормально - 1000000 значений , каждое значение
среднее от 10000 итераций вычисления, не важно...
Заказчик хочет паузу на поток
sleep нам не доступен т.к. Static Protected Members
о у нас есть wait()
Правильно я понял: Чтобы приостановить поток нужно просто вызвать wait()
а что бы его продолжить нужно вызвать run(); естественно в обоих случаях проверить что поток вообще существует и выполняется?
Спасибо.
Qt Потоки (Приостановка и продолжение потока)
Модератор: Модераторы разделов
-
Val
- Ведущий рубрики
- Сообщения: 2211
- Статус: Редактор LXF
Re: Qt Потоки
TwisT писал(а): ↑16.10.2006 10:24Всем доброго времени суток
До этого никогда потоками не пользовался(аж стыдно)
Поток производит очень долгое мат статистическое вычисление
с приоритетом QThread::IdlePriority, т.к. скорости от меня никто не просил
По времени пару минут, но это нормально - 1000000 значений , каждое значение
среднее от 10000 итераций вычисления, не важно...
Заказчик хочет паузу на поток
sleep нам не доступен т.к. Static Protected Members
И чего?
Код: Выделить всё
class MyThread: public QThread {
bool suspend_flag;
public:
void suspend() {suspend_flag = true; while (suspend_flag) Thread::sleep(100);}
void resume() {suspend_flag=false;}
}Решение, надо заметить, красотой не блещет, но работать должно.
о у нас есть wait()
Правильно я понял: Чтобы приостановить поток нужно просто вызвать wait()
правильно - если Вам нужно приотсановить поток из которого был вызван wait(). До тех пор, пока не завершится поток для которого Вы вызвали wait() или не случится тайм-аут. Для того, чтобы приостановить выполнение процесса, эта штука непригодна.
"Если думаешь, говоришь, пишешь и подписываешь - не удивляйся." (с)
-
TwisT
- Сообщения: 265
- ОС: Debian
Re: Qt Потоки
Протупил, спасибо.
Слышал что мона QEvent-ами в принципе потоками управлять
но это вроде для 4 версии библиотеки было.
Слышал что мона QEvent-ами в принципе потоками управлять
но это вроде для 4 версии библиотеки было.
Linux user #432536.
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Qt Потоки
Val писал(а): ↑19.10.2006 18:42TwisT писал(а): ↑16.10.2006 10:24
Всем доброго времени суток
До этого никогда потоками не пользовался(аж стыдно)
Поток производит очень долгое мат статистическое вычисление
с приоритетом QThread::IdlePriority, т.к. скорости от меня никто не просил
По времени пару минут, но это нормально - 1000000 значений , каждое значение
среднее от 10000 итераций вычисления, не важно...
Заказчик хочет паузу на поток
sleep нам не доступен т.к. Static Protected Members
И чего?
Код: Выделить всё
class MyThread: public QThread { bool suspend_flag; public: void suspend() {suspend_flag = true; while (suspend_flag) Thread::sleep(100);} void resume() {suspend_flag=false;} }
Решение, надо заметить, красотой не блещет, но работать должно.
И как оно должно работать, что то я не соображу? Во-первых компилятор может преобразовать цикл в вечный, т.е. while(1) Thread::sleep(100); т.к. в цикле suspend_flag не меняется (хотя конечно Thread::sleep может делать чего нибудь, но всё же это опасно). Чтобы этого не было, его надо, как минимум, объявить volatile. Во-вторых я всё равно не пойму, как оно будет работать.
-
Val
- Ведущий рубрики
- Сообщения: 2211
- Статус: Редактор LXF
Re: Qt Потоки
v04bvs писал(а): ↑20.10.2006 11:31И как оно должно работать, что то я не соображу? Во-первых компилятор может преобразовать цикл в вечный, т.е. while(1) Thread::sleep(100); т.к. в цикле suspend_flag не меняется (хотя конечно Thread::sleep может делать чего нибудь, но всё же это опасно). Чтобы этого не было, его надо, как минимум, объявить volatile. Во-вторых я всё равно не пойму, как оно будет работать.
Насчет бесконечного цикла - volatile не помешает, согласен
Update.
Клянул свежим взглядом на код - понял, в чем дело.
"Если думаешь, говоришь, пишешь и подписываешь - не удивляйся." (с)