Race conditions... come si comporta un programma



  • Ciao, ennesimo dubbio.
    Se io ho una routine tipo questa

        QScreen *screen = QGuiApplication::primaryScreen();
        QPixmap schermo = screen->grabWindow(QDesktopWidget().winId(),
                                             quadroestrattix, quadroestrattiy, quadroestrattilarghezza, quadroestrattialtezza);
        QImage desk = schermo.toImage();
        ui->qt5QuadroGrande->setPixmap(QPixmap::fromImage(desk));
    

    posso essere matematicamente certo che la seconda istruzione la esegua solo dopo avere completato la prima (trattandosi non di istruzione elementare), che la terza istruzione venga eseguita solo dopo avere completato la seconda e così via ?



  • Formalmente si. 100% si.
    Nella sostanza ci sono pero' operazioni che per efficienza vengono delegate al prossimo ciclo dell'event loop. l'esempio piu' classico e' QWidget::update(): la funzione viene eseguita nell'ordine ma al suo interno quella funzione non fa altro che dire a Qt di ri-paintare il widget non appena ha tempo



  • Immaginavo qualcosa del genere. Stranamente non mi compariva niente a video finché non riuscivo a bloccare il loop (detto nel post del keyeventpress). Cercando con Google ho trovate che si può costringere qApp a completare tutti i thread e così ho risolto inserendo l'istruzione qApp->processEvents(); nel loop. Grazie.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.