Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-01-2022, 19:06   #1
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1776
[Python] Timer avviato in un thread mi chiude il programma allo scadere

Sto realizzando con l'ausilio di PyQT un tool che mi fa comodo al lavoro, si tratta di un programma che legge un file contenete GCODE, quindi coordinate per il movimento di una macchina CNC, e traccia su una QGraphicsScene questi movimenti. Nel tracciare questi movimenti calcola il fattore di scala per ingrandire o ridurre il disegno per adeguarsi alle dimensioni della scena.
Se dopo aver mostrato un tracciato ridimensiono la finestra dell'interfaccia, quindi cambiano anche le dimensioni della scena, e riclicco sul pulsante per elaborare il file GCODE, il tracciato viene ridisegnato con il fattore di scala adeguato.

Ora vorrei rendere questa cosa automatica, ovvero al cambiare le dimensioni della scena, deve partire automaticamente la rielaborazione del tracciato.
Per non farla partire continuamente quando ad esempio si trascina un bordo della finestra, ho pensato di introdurre un timer avviato appena la finestra cambia e si resetta se cambia ancora prima di 3 secondi. Se passano 3 secondi senza ridimensionamenti, viene avviata la rielaborazione.
Riesco a fare quasi tutto, tranne per il fatto che allo scadere del timer parte la rielaborazione, ma prima che finisca viene chiuso il programma.

Non ho messaggi d'errore nella console, né vengono sollevate eccezzioni. semplicemente il programma termina.
Sono certo che c'entri il timer perché la rielaborazione manuale chiama esattamente la stessa funzione chiamata dal timer, e manualmente il programma non si chiude.

Il codice completo lo potete leggere qui

Indicazioni su dove andare a guardare sul codice
A gestire tutto è la classe MainWindow, il metodo draw() è quello che viene chiamato alla pressione del pulsante "Elabora", con l'ausilio di altri metodi legge il contenuto del file GCODE (uno di prova è presente sul repository: TEST.PGR), preleva le coordinate utili e le mette in una lista di tuple, prepara le dimensioni della scena e il fattore di scala da usare, di seguito cicla sulla lista e traccia i vari segmenti che definiscono il tracciato.
Il timer viene instanziato nel costruttore di MainWindow, viene avviato/resettato nel metodo resizeEvent() mediante il metodo timerManager(). Lo stop è invece gestito direttamente nel metodo run() della classe ResettableTimer().

Riuscite a capire per quale motivo l'uso del timer mi fa chiudere il programma?
Alhazred è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2022, 20:13   #2
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Da ignorante: potrebbe essere causato dal fatto che la draw non viene eseguita nella eventloop di QT? (non ho visto il codice, ma se fosse già così non fare caso a questa osservazione)
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2022, 22:57   #3
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1776
Sì, il metodo draw() è eseguito all'interno dell'event loop.
Alhazred è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2022, 23:01   #4
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Quote:
Originariamente inviato da Alhazred Guarda i messaggi
Sì, il metodo draw() è eseguito all'interno dell'event loop.
Però non mi pare che venga chiamato nell'event loop quando scade il resettable timer, corretto? Viene eseguito da un thread tuo, che non appartiene all'eventloop giusto?
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2022, 23:15   #5
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1776
Per il mio livello di conoscenza sul tema, questa è una domanda non semplice.
Penso di aver capito cosa dici, sì, il metodo draw è chiamato da un thread appartenente ad una mia classe esterna alla quale viene passato da utilizzare come callback.
Se questo fosse il problema, come istanzio il timer in un thread dell'event loop?
Alhazred è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2022, 23:23   #6
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Usa un QTimer. Direi che questo fa al caso tuo:
https://stackoverflow.com/questions/...idgets-in-pyqt
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2022, 23:43   #7
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1776
Ho abbozzato un po' di codice giusto perché si usasse il QTimer come mi hai suggerito e funziona, ora dovrò solo perfezionarne il funzionamento.
Grazie mille!
Alhazred è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Amazon manda un drone di ronda in casa e...
Come si sopravvive un anno su Marte? Qua...
OPPO Enco Clip 2: arriva la colorazione ...
POCO porta in Italia il nuovo mid-range ...
NARWAL Flow 2, doppio coupon Amazon: il ...
Kena anticipa il Black Friday: 350 GB e ...
GTA 6 su Xbox Cloud Gaming: niente strea...
NZXT presenta i nuovi H7 e H5, arrivano ...
Apple prepara un'app per trasformare i M...
C'è ancora vita per il Tesla Cybe...
Black Friday in anticipo e offerte a tem...
Mac mini M6 a 899€, Mac Studio M5 Max co...
Steam svela gli FPS dei giochi su Deck (...
Non solo Siri: l'intelligenza artificial...
La nuova mossa di Instagram: i filtri de...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v