Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Semafori e thread
Forum Updated to NodeBB v4.3 + New Features

Semafori e thread

Scheduled Pinned Locked Moved Solved Italian
4 Posts 2 Posters 607 Views
  • 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.
  • MontanaroM Offline
    MontanaroM Offline
    Montanaro
    wrote on last edited by Montanaro
    #1

    Ciao
    ho un programma strutturato in questo modo:

    *MainWindow::MainWindow(QWidget* parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
       
        qDebug() << "Program started!"
    
        QTimer* timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(poll()));
        //timer->start(1000);
        timer->start(500);
    }
    
    
    
    unsigned char MainWindow::poll()
    {
    
    //------------------------------------------------------------------------------
    unsigned char MainWindow::poll()
    {
        unsigned short distance;
            qDebug() << " Polling started";
    
             check_for_interrupt(ADDR, &distance); 
            
                qDebug() << "valore distanza:" << distance;
     
                ui->label->setText("il valore della distanza in mm è: " + QString::number(distance));
    
        
            }
    
    --------------------*
    

    vorrei separare i due processi della visualizzazione e della funzione che ho per controllare gli interrupt.

    Mi hanno consigliato di inserire un semaforo e fare multithread.

    Esempi e suggerimenti ?

    1 Reply Last reply
    0
    • guerinoniG Offline
      guerinoniG Offline
      guerinoni
      wrote on last edited by guerinoni
      #2

      @Montanaro Dipende da che tipo di applicazione stai sviluppando, e che cosa si deve fare sugli altri thread... Comunque c'e' il modulo QtConcurrent che puoi sfruttare, oppure gestire le operazioni "a mano" su dei thread separati

      MontanaroM 1 Reply Last reply
      0
      • MontanaroM Offline
        MontanaroM Offline
        Montanaro
        wrote on last edited by
        #3

        @guerinoni said in Semafori e thread:

        @Montanaro Dipende da che tipo di applicazione stai sviluppando, e che cosa si deve fare sugli altri thread... Comunque c'e' il modulo QtConcurrent che puoi sfruttare, oppure gestire le operazioni "a mano" su dei thread separati

        Ti spiego il problema:

        la funzione check_for_interrupt usa l'ioctl per leggere l'i2c dal seguente file /dev/usb/MyDevice
        uso lo stesso MyDevice per stampare a video (tramite l' ui.label).
        Tempo che i due processi entrino in conflitto.

        Una soluzione che mi è stata suggerita è quella di mettere dei semafori (lock/unlock) per far accedere l'altra funzione alla risorsa solo quando quest'ultima è stata liberata dalla prima.
        La classe consigliatami è questa:
        https://doc.qt.io/archives/qt-4.8/qmutexlocker.html
        Ho dei dubbi che il tutto funzioni ma è una strada che devo provare.

        Hai idea di come debba fare ?

        1 Reply Last reply
        0
        • guerinoniG guerinoni

          @Montanaro Dipende da che tipo di applicazione stai sviluppando, e che cosa si deve fare sugli altri thread... Comunque c'e' il modulo QtConcurrent che puoi sfruttare, oppure gestire le operazioni "a mano" su dei thread separati

          MontanaroM Offline
          MontanaroM Offline
          Montanaro
          wrote on last edited by
          #4

          @guerinoni said in Semafori e thread:

          @Montanaro Dipende da che tipo di applicazione stai sviluppando, e che cosa si deve fare sugli altri thread... Comunque c'e' il modulo QtConcurrent che puoi sfruttare, oppure gestire le operazioni "a mano" su dei thread separati

          all'inizio avevo inserito un QMutex .
          mutex.unlock() e mutex.lock()
          poi ho visto che bastava mettere le due operazioni su thread separati e funzionava tutto.

          1 Reply Last reply
          0

          • Login

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