Race conditions... come si comporta un programma
-
Ciao, ennesimo dubbio.
Se io ho una routine tipo questaQScreen *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.