Gambas France BETA


Pas de compte ? Incription

clôture toujours

Ce sujet est résolu.

1
AuteurMessages
valaquarus#1 Posté le 22/6/2021 à 12:10:31
-- Unus Ex Altera --Bonjour à tous,
au moment de la clôture d'un prog je contrôle dans close() par ceci :
1
2
3
IF ERROR THEN
Message.Error("Class : " & Str(Error.Class) & ", code : " & Error.Code & ", " & Error.Backtrace & " à " Error.Wher "Ok")
ENDIF

(la virgule entre Error.where et "OK" n'est pas prise par le site comprends pas pourquoi?)
je reçois le message suivant que je suis obligé de raconter car pas d'images possibles :
Class : (0x5601d0b679fa8) code 13 à _GridView_Rows._GetRowHeight.152

Le code 13, je sais (Null) mais le reste je ne comprends pas.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#2 Posté le 25/6/2021 à 12:17:12
-- Unus Ex Altera --Bonjour,
un gridView se met à jour au moment de la clôture alors qu'il vient d'être effacé (Null). Mais pourquoi _GetRowHeight et pas autre chose, et pourquoi une erreur sur la clôture, qui ne se reproduit pas systématiquement?
Philippe

PS : Ce problème de clôture est constant sur beaucoup de machines et pour beaucoup de programmes chez beaucoup d'entre nous. Quelqu'un pourrait m'expliquer ce que la procédure Close() fait bien et ce qu'elle fait mal?
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Foromus#3 Posté le 25/6/2021 à 16:08:08
Bonjour à tous,

Voilà qui me semble curieux ces problèmes de clôture.
N'étant pas spécialiste et pas très féru, je procède toujours de la même façon dans mes projets :

1
2
3
4
CLOSE Form1
CLOSE Form2
.....
QUIT


Si j'ai vraiment plusieurs forms, je place ce code dans un module. J'ai du reste souvent recours au module pour avoir des variables globales, en quelque sorte...
Bon, je dis ça....
valaquarus#4 Posté le 25/6/2021 à 18:50:04
-- Unus Ex Altera --Bonsoir Foromus,
je suis comme toi contraint au Quit après vidage par un module principal pour les mêmes raisons que toi, c'est radical et efficace même si l'IDE se plaint au moins la mémoire est libérée car si on fait pas cela on peut garder en mémoire un programme qui occupe de la place et ne fait rien car il est en principe fermé. Mais il parait que ce n'est pas de la bonne programmation et qu'il faut faire le ménage après le passage de notre programme, je veux bien mais encore faut il savoir ce qu'il faut nettoyer car j'ai essayer de tout mettre à Null ça ne fonctionne pas et même, ça ralenti la clôture effective, en fait le travail de la procédure Close() mais comme on ne sait pas ce qu'elle fait exactement, ministère et boule de la gomme...
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Foromus#5 Posté le 30/6/2021 à 09:38:44
Bonjour valaquarus,

Le problème de la mémoire est assez contraignant en Gambas.
Il y a quelques temps, j'avais posté sur la sujet car j'avais un souci sur un projet de visualisation, et la mémoire grossissait à vue d'œil au fur et à mesure que les affichages se suivaient. A l'époque, je n'avais pas trouvé d'autre solution que de fermer le projet à la fin de la visualisation, en espérant que la quantité à traiter ne soit pas trop importante, et de le relancer pour l'utilisation suivante. J'ai un peu atténué le souci en installant 16 G° de RAM, c'est sûr que ça permet de voir venir. Compte-tenu de mes modestes besoins, cette configuration me suffit pour l'instant, mais la limitation reste bien réelle...
Après, je ne vois pas trop pourquoi la méthode que j'utilise ne serait pas convenable (bien-pensance ?.....), il m'arrive d'utiliser Close quand j'ai appelé une form et que je n'en ai plus besoin, sans pour cela avoir remarqué des conséquences spécialement néfastes.
valaquarus#6 Posté le 30/6/2021 à 10:46:44
-- Unus Ex Altera --Merci Foromus de ton retour,
comme toi je ne me soucis guère de la bien pensance mais j'aimerais bien comprendre le fonctionnement de ce Close.
Il y a encore quelques temps je ne m'en souciais pas car je pensais que mes programmes se fermaient bien et j'ai lancer Ksysguard (je suis sous Kde Neon), un programme de gestion des processus en mémoire. Quand je me suis aperçu que mes programmes que je croyais fermés étaient toujours en mémoire et en mangeaient une bonne partie, j'ai d'abord tué tous les processus concernés puis j'ai modifié mes programmes avec Quit pour voir. Là l'IDE de Gambas n'était pas content mais, toujours avec Ksysguard je voyais le processus s'arrêter et libérer la mémoire ce qui était l'objectif. J'ai lancé une conversation sur le forum à propos de close(), tenté tout ce qui m'a été proposé en le vérifiant à chaque fois avec Ksysguard pour m'apercevoir que rien ne fonctionnait que Quit.
Ma dernière tentative est celle-ci :
1
IF NOT IsNull(FMain) THEN QUIT
que je met dans un module qui me sers au démarrage et à la clôture du programme. Le plus étrange c'est qu'un coup sur deux (dans l'IDE) la clôture se fait sans passer par le Quit donc la Fmain est bien libérée par le programme, alors (toujours contrôlé par Ksysguard).
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
jeanyvon#7 Posté le 3/7/2021 à 15:04:22
Gambas? Ma! Et gustoBonjour!
J'ai testé, avec le même logiciel, tous mes softs : Aucun ne laisse de trace. Ils disparaissent à la fermeture.
Vieillir? On peut retarder mais pas y échapper!
valaquarus#8 Posté le 14/7/2021 à 13:39:53
-- Unus Ex Altera --Bonjour et merci JeanYvon de ton retour,
as tu un secret que tu voudrais bien partager pour bien fermer tes programmes?
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
jeanyvon#9 Posté le 15/7/2021 à 07:03:08
Gambas? Ma! Et gustoHello!
rien de secret....me.close
et une sauvegarde dans form_close
Vieillir? On peut retarder mais pas y échapper!
1