Михаиллл
Мамыр 27, 2020, 7:08 Т.Қ.

Вопросы по QFutureWatcher

Добрый день.
Есть такой код с QFutureWatcher.
Можно ли прервать выполнение кода в QFutureWatcher при каком-либо событии, например при достижении 10?
Можно ли вместо vector задать последовательность вручную, например "int i = 0; i < 100; i++" ?

  1. QVector<std::string> vector;
  2. for(int i = 0; i < 100; i++){
  3. vector.append(std::to_string(i));
  4. }
  5.  
  6. QFutureWatcher<void> futureWatcher;
  7. QEventLoop loop;
  8.  
  9. futureWatcher.setFuture(QtConcurrent::map(vector,[=](const std::string& d){
  10. qDebug()<<QString::fromStdString(d)<<QString::fromStdString(stdStringToMd5Hash(d));
  11. }));
  12.  
  13. loop.exec();
  14. futureWatcher.waitForFinished();
1

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

2
Михаиллл
  • Мамыр 27, 2020, 7:39 Т.Қ.

Остановить вышло так. Но вот можно ли засунуть последовательность не в контейнер, а вычислять походу?

  1. QFutureWatcher<void> futureWatcher;
  2. QEventLoop loop;
  3. connect ( this , &MainWindow::signalStopFuter, &futureWatcher, &QFutureWatcher<void>::cancel);
  4. futureWatcher.setFuture(QtConcurrent::map(vector,[=](const std::string& d){
  5. qDebug()<<QString::fromStdString(d)<<QString::fromStdString(stdStringToMd5Hash(d));
  6. if(d == "10"){
  7. signalStopFuter();
  8. }
  9. }));
    Михаиллл
    • Мамыр 27, 2020, 10:15 Т.Қ.
    • Жауап шешім ретінде белгіленді.

    Оказывается без QEventLoop loop; работает

      Пікірлер

      Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
      Кіріңіз немесе Тіркеліңіз