Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Program freeze when try to get MD5 of files
Forum Updated to NodeBB v4.3 + New Features

Program freeze when try to get MD5 of files

Scheduled Pinned Locked Moved Unsolved General and Desktop
31 Posts 6 Posters 3.3k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • SGaistS SGaist

    Hi,

    One way is to offload the work using QtConcurrent.

    S Offline
    S Offline
    saeid0034
    wrote on last edited by
    #6

    @SGaist thanks for reply, do you have any example close to my problem?

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #7

      Did you check the examples from the documentation ?

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      S 1 Reply Last reply
      1
      • SGaistS SGaist

        Did you check the examples from the documentation ?

        S Offline
        S Offline
        saeid0034
        wrote on last edited by
        #8

        @SGaist i need to use what function of QtConcurrent?

        1 Reply Last reply
        0
        • S Offline
          S Offline
          saeid0034
          wrote on last edited by
          #9

          i use this code (i dont know if its right or not)

          QString loc40 = "/file/test.pak";
              QFuture<QString> future40 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc40);
              QString pakchunk40 = future40.result();
          

          but program freeze again

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #10

            As explained in the result documentation, it will block if the computation is not done. Use QFutureWatcher with signals and slots to properly make things asynchronous.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            S 1 Reply Last reply
            2
            • SGaistS SGaist

              As explained in the result documentation, it will block if the computation is not done. Use QFutureWatcher with signals and slots to properly make things asynchronous.

              S Offline
              S Offline
              saeid0034
              wrote on last edited by
              #11

              @SGaist The computation is done
              Because the outputs are correct after the program exits From freeze, the only problem is program freeze, no matter how i try, and i sure problem coming from MD5 Generation

              1 Reply Last reply
              0
              • S Offline
                S Offline
                saeid0034
                wrote on last edited by
                #12

                i test Q In my code

                    QFutureWatcher<void>* watcher = new QFutureWatcher<void>();
                    connect(watcher, SIGNAL(finished()), this, SLOT(Md5_gen()));
                    watcher->setFuture(future33);
                

                It is wrong or ok?
                i dont know how add my function to slot, i just put my md5 function name on it

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  saeid0034
                  wrote on last edited by
                  #13

                  here is my full code for now

                  QString Md5_gen(QString const &s)
                  {
                      QString pakchunk_Md5;
                      QCryptographicHash crypto(QCryptographicHash::Md5);
                      QFile pakchunk(QDir::currentPath() + s);
                      if (pakchunk.open(QIODevice::ReadOnly))
                      {
                          while(!pakchunk.atEnd()){
                          crypto.addData(pakchunk.read(8192));
                          }
                      } else
                      {
                          qDebug() << "Can't open file.";
                          pakchunk_Md5 = "nofile";
                          return pakchunk_Md5;
                      }
                      pakchunk_Md5 = crypto.result().toHex();
                      return pakchunk_Md5;
                  }
                  
                  MainWindow2::MainWindow2(QWidget *parent) :
                      QMainWindow(parent),
                      ui(new Ui::MainWindow2)
                  {
                      ui->setupUi(this);
                  }
                  
                  MainWindow2::~MainWindow2()
                  {
                      delete ui;
                  }
                  
                  void MainWindow2::on_pushButton_clicked()
                  {
                      int file_ok = 0;
                  
                      QFutureWatcher<void>* watcher = new QFutureWatcher<void>();
                      connect(watcher, SIGNAL(finished()), this, SLOT(Md5_gen()));
                      //file pak33
                      QString loc33 = "/SM/test.pak";
                      QFuture<QString> future33 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc33);
                      QString pakchunk33 = future33.result();
                      watcher->setFuture(future33);
                      qDebug() << pakchunk33;
                      if (pakchunk33 == "f7002d4419cd235a87746715ba6fb2ea")
                      {
                          qDebug() << "OK";
                          file_ok++;
                          ui->label_8->setText("OK");
                          ui->label_8->setStyleSheet("QLabel { color : green; }");
                      } else if (pakchunk33 == "nofile")
                      {
                          qDebug() << "no file found";
                          ui->label_8->setText("not found");
                          ui->label_8->setStyleSheet("QLabel { color : red; }");
                      } else
                      {
                          qDebug() << "file is diffrent";
                          ui->label_8->setText("wrong");
                          ui->label_8->setStyleSheet("QLabel { color : red; }");
                      }
                  
                      //file pak34
                      QString loc34 = "/SM/test2.pak";
                      QFuture<QString> future34 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc34);
                      QString pakchunk34 = future34.result();
                      qDebug() << pakchunk34;
                      watcher->setFuture(future34);
                      if (pakchunk34 == "64c77598586b6c3cb60beed0b0750620")
                      {
                          qDebug() << "OK";
                          file_ok++;
                          ui->label->setText("OK");
                          ui->label->setStyleSheet("QLabel { color : green; }");
                      } else if (pakchunk34 == "nofile")
                      {
                          qDebug() << "no file found";
                          ui->label->setText("not found");
                          ui->label->setStyleSheet("QLabel { color : red; }");
                      } else
                      {
                          qDebug() << "file is diffrent";
                          ui->label->setText("wrong");
                          ui->label->setStyleSheet("QLabel { color : red; }");
                      }
                  
                      //file pak35
                      QString loc35 = "/SM/test3.pak";
                      QFuture<QString> future35 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc35);
                      QString pakchunk35 = future35.result();
                      watcher->setFuture(future35);
                      qDebug() << pakchunk35;
                      if (pakchunk35 == "ee53f7a7656a32b5278c460baec46f16")
                      {
                          qDebug() << "OK";
                          file_ok++;
                          ui->label_7->setText("OK");
                          ui->label_7->setStyleSheet("QLabel { color : green; }");
                      } else if (pakchunk35 == "nofile")
                      {
                          qDebug() << "no file found";
                          ui->label_7->setText("not found");
                          ui->label_7->setStyleSheet("QLabel { color : red; }");
                      } else
                      {
                          qDebug() << "file is diffrent";
                          ui->label_7->setText("wrong");
                          ui->label_7->setStyleSheet("QLabel { color : red; }");
                      }
                  }
                  

                  can anyone please help me find the problem

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    saeid0034
                    wrote on last edited by
                    #14

                    its fully fixed by adding qApp->processEvents(); to MD5 while

                    aha_1980A 1 Reply Last reply
                    -1
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #15

                      You do realise that your code is wrong in terms of offloading the work ? As I already wrote: result will be blocking if the computation is not finished.

                      The idea is to use the watcher so you let the computation run and in the slot connected to your QFutureWatcher you run your UI updates.

                      What you have here is mostly the same code as before, but more complicated, since you are blocking your event loop with your calls to result.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      S 1 Reply Last reply
                      4
                      • S saeid0034

                        its fully fixed by adding qApp->processEvents(); to MD5 while

                        aha_1980A Offline
                        aha_1980A Offline
                        aha_1980
                        Lifetime Qt Champion
                        wrote on last edited by
                        #16

                        Hi @saeid0034,

                        its fully fixed by adding qApp->processEvents(); to MD5 while

                        For sure not! Please don't use processEvents() if you don't know what you are doing!

                        Regards

                        Qt has to stay free or it will die.

                        1 Reply Last reply
                        4
                        • SGaistS SGaist

                          You do realise that your code is wrong in terms of offloading the work ? As I already wrote: result will be blocking if the computation is not finished.

                          The idea is to use the watcher so you let the computation run and in the slot connected to your QFutureWatcher you run your UI updates.

                          What you have here is mostly the same code as before, but more complicated, since you are blocking your event loop with your calls to result.

                          S Offline
                          S Offline
                          saeid0034
                          wrote on last edited by
                          #17

                          @SGaist i don't know how correctly use QFutureWatcher in my code...
                          As you can see in my full cod in above im add QFutureWatcher to my cod, is it wrong?
                          Can you please guide me to how do this?

                          aha_1980A 1 Reply Last reply
                          0
                          • S saeid0034

                            @SGaist i don't know how correctly use QFutureWatcher in my code...
                            As you can see in my full cod in above im add QFutureWatcher to my cod, is it wrong?
                            Can you please guide me to how do this?

                            aha_1980A Offline
                            aha_1980A Offline
                            aha_1980
                            Lifetime Qt Champion
                            wrote on last edited by
                            #18

                            Hi @saeid0034,

                            As @SGaist already said, calling result() when the future is not done yet will block your event loop.

                            You should call result() in the slot connected to finished().

                            Regards

                            Qt has to stay free or it will die.

                            S 1 Reply Last reply
                            3
                            • aha_1980A aha_1980

                              Hi @saeid0034,

                              As @SGaist already said, calling result() when the future is not done yet will block your event loop.

                              You should call result() in the slot connected to finished().

                              Regards

                              S Offline
                              S Offline
                              saeid0034
                              wrote on last edited by
                              #19

                              @aha_1980 thanks for information
                              problem is i dont know much about working with slots and QFutureWatcher
                              can you please say to me i need to do what with this code?

                              QString Md5_gen(QString const &s)
                              {
                                  QString pakchunk_Md5;
                                  QCryptographicHash crypto(QCryptographicHash::Md5);
                                  QFile pakchunk(QDir::currentPath() + s);
                                  if (pakchunk.open(QIODevice::ReadOnly))
                                  {
                                      while(!pakchunk.atEnd()){
                                      crypto.addData(pakchunk.read(8192));
                                      }
                                  } else
                                  {
                                      qDebug() << "Can't open file.";
                                      pakchunk_Md5 = "nofile";
                                      return pakchunk_Md5;
                                  }
                                  pakchunk_Md5 = crypto.result().toHex();
                                  return pakchunk_Md5;
                              }
                              
                              MainWindow2::MainWindow2(QWidget *parent) :
                                  QMainWindow(parent),
                                  ui(new Ui::MainWindow2)
                              {
                                  ui->setupUi(this);
                              }
                              
                              MainWindow2::~MainWindow2()
                              {
                                  delete ui;
                              }
                              
                              void MainWindow2::on_pushButton_clicked()
                              {
                                  int file_ok = 0;
                              
                                  QFutureWatcher<void>* watcher = new QFutureWatcher<void>();
                                  connect(watcher, SIGNAL(finished()), this, SLOT(Md5_gen()));
                                  //file pak33
                                  QString loc33 = "/SM/test.pak";
                                  QFuture<QString> future33 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc33);
                                  QString pakchunk33 = future33.result();
                                  watcher->setFuture(future33);
                                  qDebug() << pakchunk33;
                                  if (pakchunk33 == "f7002d4419cd235a87746715ba6fb2ea")
                                  {
                                      qDebug() << "OK";
                                      file_ok++;
                                      ui->label_8->setText("OK");
                                      ui->label_8->setStyleSheet("QLabel { color : green; }");
                                  } else if (pakchunk33 == "nofile")
                                  {
                                      qDebug() << "no file found";
                                      ui->label_8->setText("not found");
                                      ui->label_8->setStyleSheet("QLabel { color : red; }");
                                  } else
                                  {
                                      qDebug() << "file is diffrent";
                                      ui->label_8->setText("wrong");
                                      ui->label_8->setStyleSheet("QLabel { color : red; }");
                                  }
                              
                                  //file pak34
                                  QString loc34 = "/SM/test2.pak";
                                  QFuture<QString> future34 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc34);
                                  QString pakchunk34 = future34.result();
                                  qDebug() << pakchunk34;
                                  watcher->setFuture(future34);
                                  if (pakchunk34 == "64c77598586b6c3cb60beed0b0750620")
                                  {
                                      qDebug() << "OK";
                                      file_ok++;
                                      ui->label->setText("OK");
                                      ui->label->setStyleSheet("QLabel { color : green; }");
                                  } else if (pakchunk34 == "nofile")
                                  {
                                      qDebug() << "no file found";
                                      ui->label->setText("not found");
                                      ui->label->setStyleSheet("QLabel { color : red; }");
                                  } else
                                  {
                                      qDebug() << "file is diffrent";
                                      ui->label->setText("wrong");
                                      ui->label->setStyleSheet("QLabel { color : red; }");
                                  }
                              
                                  //file pak35
                                  QString loc35 = "/SM/test3.pak";
                                  QFuture<QString> future35 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc35);
                                  QString pakchunk35 = future35.result();
                                  watcher->setFuture(future35);
                                  qDebug() << pakchunk35;
                                  if (pakchunk35 == "ee53f7a7656a32b5278c460baec46f16")
                                  {
                                      qDebug() << "OK";
                                      file_ok++;
                                      ui->label_7->setText("OK");
                                      ui->label_7->setStyleSheet("QLabel { color : green; }");
                                  } else if (pakchunk35 == "nofile")
                                  {
                                      qDebug() << "no file found";
                                      ui->label_7->setText("not found");
                                      ui->label_7->setStyleSheet("QLabel { color : red; }");
                                  } else
                                  {
                                      qDebug() << "file is diffrent";
                                      ui->label_7->setText("wrong");
                                      ui->label_7->setStyleSheet("QLabel { color : red; }");
                                  }
                              }
                              
                              aha_1980A 1 Reply Last reply
                              0
                              • S saeid0034

                                @aha_1980 thanks for information
                                problem is i dont know much about working with slots and QFutureWatcher
                                can you please say to me i need to do what with this code?

                                QString Md5_gen(QString const &s)
                                {
                                    QString pakchunk_Md5;
                                    QCryptographicHash crypto(QCryptographicHash::Md5);
                                    QFile pakchunk(QDir::currentPath() + s);
                                    if (pakchunk.open(QIODevice::ReadOnly))
                                    {
                                        while(!pakchunk.atEnd()){
                                        crypto.addData(pakchunk.read(8192));
                                        }
                                    } else
                                    {
                                        qDebug() << "Can't open file.";
                                        pakchunk_Md5 = "nofile";
                                        return pakchunk_Md5;
                                    }
                                    pakchunk_Md5 = crypto.result().toHex();
                                    return pakchunk_Md5;
                                }
                                
                                MainWindow2::MainWindow2(QWidget *parent) :
                                    QMainWindow(parent),
                                    ui(new Ui::MainWindow2)
                                {
                                    ui->setupUi(this);
                                }
                                
                                MainWindow2::~MainWindow2()
                                {
                                    delete ui;
                                }
                                
                                void MainWindow2::on_pushButton_clicked()
                                {
                                    int file_ok = 0;
                                
                                    QFutureWatcher<void>* watcher = new QFutureWatcher<void>();
                                    connect(watcher, SIGNAL(finished()), this, SLOT(Md5_gen()));
                                    //file pak33
                                    QString loc33 = "/SM/test.pak";
                                    QFuture<QString> future33 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc33);
                                    QString pakchunk33 = future33.result();
                                    watcher->setFuture(future33);
                                    qDebug() << pakchunk33;
                                    if (pakchunk33 == "f7002d4419cd235a87746715ba6fb2ea")
                                    {
                                        qDebug() << "OK";
                                        file_ok++;
                                        ui->label_8->setText("OK");
                                        ui->label_8->setStyleSheet("QLabel { color : green; }");
                                    } else if (pakchunk33 == "nofile")
                                    {
                                        qDebug() << "no file found";
                                        ui->label_8->setText("not found");
                                        ui->label_8->setStyleSheet("QLabel { color : red; }");
                                    } else
                                    {
                                        qDebug() << "file is diffrent";
                                        ui->label_8->setText("wrong");
                                        ui->label_8->setStyleSheet("QLabel { color : red; }");
                                    }
                                
                                    //file pak34
                                    QString loc34 = "/SM/test2.pak";
                                    QFuture<QString> future34 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc34);
                                    QString pakchunk34 = future34.result();
                                    qDebug() << pakchunk34;
                                    watcher->setFuture(future34);
                                    if (pakchunk34 == "64c77598586b6c3cb60beed0b0750620")
                                    {
                                        qDebug() << "OK";
                                        file_ok++;
                                        ui->label->setText("OK");
                                        ui->label->setStyleSheet("QLabel { color : green; }");
                                    } else if (pakchunk34 == "nofile")
                                    {
                                        qDebug() << "no file found";
                                        ui->label->setText("not found");
                                        ui->label->setStyleSheet("QLabel { color : red; }");
                                    } else
                                    {
                                        qDebug() << "file is diffrent";
                                        ui->label->setText("wrong");
                                        ui->label->setStyleSheet("QLabel { color : red; }");
                                    }
                                
                                    //file pak35
                                    QString loc35 = "/SM/test3.pak";
                                    QFuture<QString> future35 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc35);
                                    QString pakchunk35 = future35.result();
                                    watcher->setFuture(future35);
                                    qDebug() << pakchunk35;
                                    if (pakchunk35 == "ee53f7a7656a32b5278c460baec46f16")
                                    {
                                        qDebug() << "OK";
                                        file_ok++;
                                        ui->label_7->setText("OK");
                                        ui->label_7->setStyleSheet("QLabel { color : green; }");
                                    } else if (pakchunk35 == "nofile")
                                    {
                                        qDebug() << "no file found";
                                        ui->label_7->setText("not found");
                                        ui->label_7->setStyleSheet("QLabel { color : red; }");
                                    } else
                                    {
                                        qDebug() << "file is diffrent";
                                        ui->label_7->setText("wrong");
                                        ui->label_7->setStyleSheet("QLabel { color : red; }");
                                    }
                                }
                                
                                aha_1980A Offline
                                aha_1980A Offline
                                aha_1980
                                Lifetime Qt Champion
                                wrote on last edited by
                                #20

                                Hi @saeid0034,

                                see e.g. this example.

                                Regards

                                Qt has to stay free or it will die.

                                S 1 Reply Last reply
                                3
                                • aha_1980A aha_1980

                                  Hi @saeid0034,

                                  see e.g. this example.

                                  Regards

                                  S Offline
                                  S Offline
                                  saeid0034
                                  wrote on last edited by saeid0034
                                  #21

                                  @aha_1980 thanks, with this example gui run better, but on big file (1.5GB >) gui still freeze for some sec! what i need to do?

                                  Christian EhrlicherC 1 Reply Last reply
                                  0
                                  • S saeid0034

                                    @aha_1980 thanks, with this example gui run better, but on big file (1.5GB >) gui still freeze for some sec! what i need to do?

                                    Christian EhrlicherC Offline
                                    Christian EhrlicherC Offline
                                    Christian Ehrlicher
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #22

                                    @saeid0034 said in Program freeze when try to get MD5 of files:

                                    what i need to do?

                                    fix your code to properly run the task in a separate thread.

                                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                                    Visit the Qt Academy at https://academy.qt.io/catalog

                                    S 1 Reply Last reply
                                    1
                                    • Christian EhrlicherC Christian Ehrlicher

                                      @saeid0034 said in Program freeze when try to get MD5 of files:

                                      what i need to do?

                                      fix your code to properly run the task in a separate thread.

                                      S Offline
                                      S Offline
                                      saeid0034
                                      wrote on last edited by saeid0034
                                      #23

                                      @Christian-Ehrlicher my code

                                      main.cpp

                                      #include "user_def.h"
                                      #include "mainwindow2.h"
                                      #include...
                                      
                                      QString Md5_gen(QString const &s)
                                      {
                                          QString pakchunk_Md5;
                                          QCryptographicHash crypto(QCryptographicHash::Md5);
                                          QFile pakchunk("D:/Games/TDPA - Man of Medan" + s);
                                          if (pakchunk.open(QIODevice::ReadOnly))
                                          {
                                              while(!pakchunk.atEnd()){
                                              crypto.addData(pakchunk.read(8192));
                                              }
                                          } else
                                          {
                                              qDebug() << "Can't open file.";
                                              pakchunk_Md5 = "nofile";
                                              return pakchunk_Md5;
                                          }
                                          pakchunk_Md5 = crypto.result().toHex();
                                          return pakchunk_Md5;
                                      }
                                      
                                      int main(int argc, char *argv[]) {
                                        QApplication a(argc, argv);
                                      
                                        a.setStyle(new DarkStyle);
                                      
                                        FramelessWindow framelessWindow;
                                        framelessWindow.setWindowIcon(a.style()->standardIcon(QStyle::SP_DesktopIcon));
                                      
                                        MainWindow *mainWindow = new MainWindow;
                                      
                                        framelessWindow.setContent(mainWindow);
                                        framelessWindow.show();
                                      
                                        return a.exec();
                                      }
                                      

                                      user_def.h

                                      #ifndef USER_DEF_H
                                      #define USER_DEF_H
                                      #include <QString>
                                      
                                      QString Md5_gen(QString const &s);
                                      
                                      #endif // USER_DEF_H
                                      
                                      

                                      mainwindow2.h

                                      #ifndef MAINWINDOW2_H
                                      #define MAINWINDOW2_H
                                      
                                      #include <QMainWindow>
                                      #include <QtConcurrentRun>
                                      #include <QFuture>
                                      #include <QFutureWatcher>
                                      #include <QThread>
                                      #include <QThreadPool>
                                      #include "user_def.h"
                                      
                                      namespace Ui {
                                      class MainWindow2;
                                      }
                                      
                                      class MainWindow2 : public QMainWindow
                                      {
                                          Q_OBJECT
                                      
                                      public:
                                          explicit MainWindow2(QWidget *parent = nullptr);
                                          ~MainWindow2();
                                      
                                      public slots:
                                            void run_thread();
                                            void displayFinishedBox();
                                      
                                      private slots:
                                          void on_pushButton_clicked();
                                      
                                          void on_pushButton_2_clicked();
                                      
                                          void on_radioButton_2_clicked();
                                      
                                          void on_radioButton_4_clicked();
                                      
                                          void on_radioButton_3_clicked();
                                      
                                          void on_radioButton_clicked();
                                      
                                      private:
                                          Ui::MainWindow2 *ui;
                                          QFutureWatcher<QString> *watcher;
                                          QFuture<QString> *future;
                                      };
                                      
                                      #endif // MAINWINDOW2_H
                                      

                                      mainwindow2.cpp

                                      #include...
                                      
                                      MainWindow2::MainWindow2(QWidget *parent) :
                                          QMainWindow(parent),
                                          ui(new Ui::MainWindow2)
                                      {
                                          ui->setupUi(this);
                                          connect(ui->pushButton, &QPushButton::clicked,
                                                     this, &MainWindow2::run_thread);
                                      
                                      
                                          // display a message box when the calculation has finished
                                      
                                          future = new QFuture<QString>;
                                          watcher = new QFutureWatcher<QString>;
                                      
                                          connect(watcher, SIGNAL(finished()),
                                                  this, SLOT(displayFinishedBox()));
                                      
                                      }
                                      
                                      MainWindow2::~MainWindow2()
                                      {
                                          delete ui;
                                      }
                                      
                                      void MainWindow2::run_thread()
                                      {
                                          int file_ok = 0;
                                          //file pak33
                                          QString loc33 = "/SM/test1.pak";
                                          QFuture<QString> future33 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc33);
                                          watcher->setFuture(future33);
                                          QString pakchunk33 = future33.result();
                                      
                                          qDebug() << pakchunk33;
                                          if (pakchunk33 == "f7002d4419cd235a87746715ba6fb2ea")
                                          {
                                              qDebug() << "OK";
                                              file_ok++;
                                              ui->label_8->setText("OK");
                                              ui->label_8->setStyleSheet("QLabel { color : green; }");
                                          } else if (pakchunk33 == "nofile")
                                          {
                                              qDebug() << "no file found";
                                              ui->label_8->setText("not found");
                                              ui->label_8->setStyleSheet("QLabel { color : red; }");
                                          } else
                                          {
                                              qDebug() << "file is diffrent";
                                              ui->label_8->setText("wrong");
                                              ui->label_8->setStyleSheet("QLabel { color : red; }");
                                          }
                                          ui->progressBar->setValue(12);
                                      
                                          //file pak34
                                          QString loc34 = "/SM/test2.pak";
                                          QFuture<QString> future34 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc34);
                                          watcher->setFuture(future34);
                                          QString pakchunk34 = future34.result();
                                          qDebug() << pakchunk34;
                                      
                                          if (pakchunk34 == "64c77598586b6c3cb60beed0b0750620")
                                          {
                                              qDebug() << "OK";
                                              file_ok++;
                                              ui->label->setText("OK");
                                              ui->label->setStyleSheet("QLabel { color : green; }");
                                          } else if (pakchunk34 == "nofile")
                                          {
                                              qDebug() << "no file found";
                                              ui->label->setText("not found");
                                              ui->label->setStyleSheet("QLabel { color : red; }");
                                          } else
                                          {
                                              qDebug() << "file is diffrent";
                                              ui->label->setText("wrong");
                                              ui->label->setStyleSheet("QLabel { color : red; }");
                                          }
                                          ui->progressBar->setValue(25);
                                      
                                          //file pak35
                                          QString loc35 = "/SM/test3.pak";
                                          QFuture<QString> future35 = QtConcurrent::run(QThreadPool::globalInstance(), Md5_gen, loc35);
                                          watcher->setFuture(future35);
                                          QString pakchunk35 = future35.result();
                                      
                                          qDebug() << pakchunk35;
                                          if (pakchunk35 == "ee53f7a7656a32b5278c460baec46f16")
                                          {
                                              qDebug() << "OK";
                                              file_ok++;
                                              ui->label_7->setText("OK");
                                              ui->label_7->setStyleSheet("QLabel { color : green; }");
                                          } else if (pakchunk35 == "nofile")
                                          {
                                              qDebug() << "no file found";
                                              ui->label_7->setText("not found");
                                              ui->label_7->setStyleSheet("QLabel { color : red; }");
                                          } else
                                          {
                                              qDebug() << "file is diffrent";
                                              ui->label_7->setText("wrong");
                                              ui->label_7->setStyleSheet("QLabel { color : red; }");
                                          }
                                          ui->progressBar->setValue(38);
                                      
                                          /*Some other code*/
                                      

                                      i dont know what is problem on this code

                                      JonBJ 1 Reply Last reply
                                      0
                                      • Christian EhrlicherC Offline
                                        Christian EhrlicherC Offline
                                        Christian Ehrlicher
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #24

                                        @saeid0034 said in Program freeze when try to get MD5 of files:

                                        i dont know what is problem on this code

                                        You don't read the post from others:

                                        As @SGaist already said, calling result() when the future is not done yet will block your event loop.

                                        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                                        Visit the Qt Academy at https://academy.qt.io/catalog

                                        S 1 Reply Last reply
                                        4
                                        • Christian EhrlicherC Christian Ehrlicher

                                          @saeid0034 said in Program freeze when try to get MD5 of files:

                                          i dont know what is problem on this code

                                          You don't read the post from others:

                                          As @SGaist already said, calling result() when the future is not done yet will block your event loop.

                                          S Offline
                                          S Offline
                                          saeid0034
                                          wrote on last edited by
                                          #25

                                          @Christian-Ehrlicher i follow

                                          @aha_1980 said in Program freeze when try to get MD5 of files:

                                          see e.g. this example.

                                          example, i read QtConcurrent doc and try to use it with watcher but after all i dont have any luck

                                          SGaistS 1 Reply Last reply
                                          -1

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved