1
Programmazione / Re:Come si esce correttamente da un programma grafico?
« il: 05 Dicembre 2021, 15:34:56 »
Ciao vuott!
Si, questo è esattamente il motivo per cui si vuole evitare di usare la "Quit" nei programmi grafici.
O almeno credo, nel senso che, per quanto uno cerchi di deallocare tutto quello che ha allocato, ci sono sempre questi warning all'uscita con Quit. Io non sono mai riuscito ad evitarli, perlomeno.
Mmm, si ok così funzionerà anche ma non è ottimale. Non funziona allo stesso modo se invece l'istruzione
Rimane poi il problema degli altri warning.
Si ok, ma così stai dicendo al sistema operativo di killare il tuo stesso programma. Eviterà anche i warning, ma non lo chiamerei un'scita "pulita".
In ogni caso, il punto che qui volevo sollevare è che l'indicazione di usare la chiusura della form principale come metodo di uscita non funziona. O almeno non funziona sempre.
Credo che questa sia una mancanza piuttosto grave, a cui si dovrebbe trovare un rimedio più "architetturale" (==> Benoit?).
E poi: perché quando faccio click sul pulsante di chiusura il programma esce senza warning, mentre quando esco con Quit dopo aver chiuso la form principale ho dei warning? Alla fine, il codice di deallocazione che viene eseguito è lo stesso.
Ciao
Cris
Un primo reale problema che riscontro è la sollevazione di un "Warning", e più precisamente il seguente:
gbx3 [5476]: warning: circular references detected:
gbx3: 2 DBusConnection
Si, questo è esattamente il motivo per cui si vuole evitare di usare la "Quit" nei programmi grafici.
O almeno credo, nel senso che, per quanto uno cerchi di deallocare tutto quello che ha allocato, ci sono sempre questi warning all'uscita con Quit. Io non sono mai riuscito ad evitarli, perlomeno.
Per eliminare questo avviso, ho dovuto eliminare la sub-routine:Codice: [Seleziona]e far distruggere l'Oggetto "TrayIcon1" con la modalità - che tempo fa Gianluigi ci ha insegnato a fare per qualsiasi Oggetto si tratti - assegnandogli il valore "Null".Public Sub Form_Close()
TrayIcon1.Delete
End
In questo caso più precisamente:Codice: [Seleziona]Public Function DoSomething(i As Integer) As Boolean
If i = 4 Then
TrayIcon1 = Null <=======
Me.close
Return True
Endif
Return False
End
Mmm, si ok così funzionerà anche ma non è ottimale. Non funziona allo stesso modo se invece l'istruzione
TrayIcon1 = Nullla metti nella Form_Close()? (Non ho provato, più tardi lo faccio)
Rimane poi il problema degli altri warning.
Per ottenere un'uscita "pulita", dopo aver attivato il Componente "gb.signal", devo impostare la sub-routine come segue:Codice: [Seleziona]Tale soluzione impedirà al programma di proseguire oltre tale riga del "Signal.Send()".Public Function DoSomething(i As Integer) As Boolean
If i = 4 Then
Signal.Send(Application.Handle, Signal.SIGKILL)
Return True
Endif
Return False
End
Si ok, ma così stai dicendo al sistema operativo di killare il tuo stesso programma. Eviterà anche i warning, ma non lo chiamerei un'scita "pulita".
In ogni caso, il punto che qui volevo sollevare è che l'indicazione di usare la chiusura della form principale come metodo di uscita non funziona. O almeno non funziona sempre.
Credo che questa sia una mancanza piuttosto grave, a cui si dovrebbe trovare un rimedio più "architetturale" (==> Benoit?).
E poi: perché quando faccio click sul pulsante di chiusura il programma esce senza warning, mentre quando esco con Quit dopo aver chiuso la form principale ho dei warning? Alla fine, il codice di deallocazione che viene eseguito è lo stesso.
Ciao
Cris