Russian Qt Forum
Май 05, 2024, 23:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QtConcurrent  (Прочитано 3652 раз)
StatuS74
Гость
« : Август 03, 2011, 12:28 »

Код:
 QString name_file1 = "datchic1.txt";
              QFuture <bool> future1a= QtConcurrent::run(tempiratura_datchika,tn1,name_file1,nms,ftHandle1,serial1);
             if (future1a==true)
                {
                     QFuture <int> start_tect1= QtConcurrent::run(Start_test,tk1,name_file1,nms,ftHandle1,serial1);
                     //Tyd1=Tyd1-start_tect1;
                     if (start_tect1==1)
                    {
                     QFuture <void> test_times1 = QtConcurrent::run(time_test_2,Tyd1,name_file1,ftHandle1,serial1);
                    }
                 }
суть вопроса в том что мне надо что бы при выполнении этих функций программа позволяла выполнять другие действия. а так как она проверяет условия то программа"подвисает". как избавится от этого недуга Непонимающий
« Последнее редактирование: Август 04, 2011, 07:12 от StatuS74 » Записан
StatuS74
Гость
« Ответ #1 : Август 03, 2011, 14:33 »

ни кто не сталкивался с подобной штукой ??
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Август 03, 2011, 14:38 »

Не проверять условия.

//Ваш К.О.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
zenden
Гость
« Ответ #3 : Август 03, 2011, 15:01 »

Когда вы научитесь вопросы грамотно задавать? Что такое "поваляла"?
Я ничего не понял!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Август 03, 2011, 15:15 »

Код
C++ (Qt)
QFutureWatcher <bool> mWatcher;  // член класса
...
// запускаем
QObject::connect(theWatcher, SIGNAL(finished), this, SLOT(tempiratura_datchika_finished));  // this и имя слота поменять на что нужно
mWatcher.setFuture(QtConcurrent::run(tempiratura_datchika,tn1,name_file1,nms,ftHandle1,serial1));
 
А в слоте tempiratura_datchika_finished взять mWatcher.result. Все это громоздко и не очень удобно - потому что QtConcurrent хорош когда запускаемых задач "много" - а когда как у Вас так проще и лучше сделать на QThread

Что такое "поваляла"?
Я ничего не понял!
Ну захотела и "поваляла" - хорошо хоть не "попробЫвала"  Улыбающийся
« Последнее редактирование: Август 03, 2011, 15:20 от Igors » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Август 03, 2011, 15:17 »

Как вариант:
Код
C++ (Qt)
while ( !future1a.isFinished() )
{
   QCoreApplication::processEvents();
}
if (future1a==true)
...
Записан
StatuS74
Гость
« Ответ #6 : Август 04, 2011, 07:13 »

выполняемых задач какраз то ки много. просто если убрать условия то  они начинают выполнятся не одна за другой а сразу одновременно все.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Август 04, 2011, 07:23 »

StatuS74: используй QFutureWatcher. И вообще, читай ассистент.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Август 04, 2011, 08:14 »

выполняемых задач какраз то ки много. просто если убрать условия то  они начинают выполнятся не одна за другой а сразу одновременно все.
Может и много, но у Вас выполнение следующей задачи зависит от результата предыдущей - поэтому QtConcurrent только мешает. Заведите просто объект и для него слоты (параметры каждой из задач) и сигналы (такая-то задача закончилась). Потом создаете QThread и в нее помещаете Ваш объект (mobeToThread). Запускаете QThread и посылаете объекту первую задачу (сигналом). Когда придет сигнал "задача завершена" - посылаете следующую и.т.д.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 22.