Parce que ça t'éclate de rechercher les fuites mémoires et les
pointeurs perdus, toi?
Il parait que ça impressionne dans les soirées mondaines.
Parce que ça t'éclate de rechercher les fuites mémoires et les
pointeurs perdus, toi?
Il parait que ça impressionne dans les soirées mondaines.
Parce que ça t'éclate de rechercher les fuites mémoires et les
pointeurs perdus, toi?
Il parait que ça impressionne dans les soirées mondaines.
Malheureusement, tout ce qui est utile est laid ;
Pas forcément. Un objet utile n'est pas nécessairement beau; un objet
bien conçu l'est. Exemple : un portable HP est aussi utile q'un portable
Apple, mais il est moche. Une Fiat est aussi utile qu'une Jaguar, mais
elle est moche.
Malheureusement, tout ce qui est utile est laid ;
Pas forcément. Un objet utile n'est pas nécessairement beau; un objet
bien conçu l'est. Exemple : un portable HP est aussi utile q'un portable
Apple, mais il est moche. Une Fiat est aussi utile qu'une Jaguar, mais
elle est moche.
Malheureusement, tout ce qui est utile est laid ;
Pas forcément. Un objet utile n'est pas nécessairement beau; un objet
bien conçu l'est. Exemple : un portable HP est aussi utile q'un portable
Apple, mais il est moche. Une Fiat est aussi utile qu'une Jaguar, mais
elle est moche.
sinon, on peut quand même envisager le cas suivant :
thread_1 initialise un auto_ptr.
thread_2 est démarré, récupère l'auto_ptr (pendant ce temps là,
thread_1 poursuit son bonhomme de chemin et attends le signal de
thread_2 pour se libérer)
thread_2 termine son traitement. Il envoie le signal à thread_1 qu'il a
terminé.
thread_1 fini son execution, vérifie que le signal est bien arrivé
avant de se terminer. L'auto_ptr est libéré à la fin de la portée.
euh, je commence à perdre le fil de cette partie là..
Je résume donc ma pensée :
1) L'objet dans le conteneur est toujours libéré à la destruction du
conteneur, c'est à dire à la fin de la portée dans laquelle se trouve
le conteneur.
pas de fuite à la sortie du programme.
2) On peut éventuellement (si on a envie quoi) libérer l'objet avant.
3) Si le conteneur est défini hors de la portée où on créer l'objet,
l'objet survit à la portée qui a vu sa création.
sinon, on peut quand même envisager le cas suivant :
thread_1 initialise un auto_ptr.
thread_2 est démarré, récupère l'auto_ptr (pendant ce temps là,
thread_1 poursuit son bonhomme de chemin et attends le signal de
thread_2 pour se libérer)
thread_2 termine son traitement. Il envoie le signal à thread_1 qu'il a
terminé.
thread_1 fini son execution, vérifie que le signal est bien arrivé
avant de se terminer. L'auto_ptr est libéré à la fin de la portée.
euh, je commence à perdre le fil de cette partie là..
Je résume donc ma pensée :
1) L'objet dans le conteneur est toujours libéré à la destruction du
conteneur, c'est à dire à la fin de la portée dans laquelle se trouve
le conteneur.
pas de fuite à la sortie du programme.
2) On peut éventuellement (si on a envie quoi) libérer l'objet avant.
3) Si le conteneur est défini hors de la portée où on créer l'objet,
l'objet survit à la portée qui a vu sa création.
sinon, on peut quand même envisager le cas suivant :
thread_1 initialise un auto_ptr.
thread_2 est démarré, récupère l'auto_ptr (pendant ce temps là,
thread_1 poursuit son bonhomme de chemin et attends le signal de
thread_2 pour se libérer)
thread_2 termine son traitement. Il envoie le signal à thread_1 qu'il a
terminé.
thread_1 fini son execution, vérifie que le signal est bien arrivé
avant de se terminer. L'auto_ptr est libéré à la fin de la portée.
euh, je commence à perdre le fil de cette partie là..
Je résume donc ma pensée :
1) L'objet dans le conteneur est toujours libéré à la destruction du
conteneur, c'est à dire à la fin de la portée dans laquelle se trouve
le conteneur.
pas de fuite à la sortie du programme.
2) On peut éventuellement (si on a envie quoi) libérer l'objet avant.
3) Si le conteneur est défini hors de la portée où on créer l'objet,
l'objet survit à la portée qui a vu sa création.
Sam:Malheureusement, tout ce qui est utile est laid ;
[...] la proposition de Sam est fausse
Sam:
Malheureusement, tout ce qui est utile est laid ;
[...] la proposition de Sam est fausse
Sam:Malheureusement, tout ce qui est utile est laid ;
[...] la proposition de Sam est fausse
Laurent BERNE , dans le message ,sinon, on peut quand même envisager le cas suivant :
thread_1 initialise un auto_ptr.
thread_2 est démarré, récupère l'auto_ptr (pendant ce temps là,
thread_1 poursuit son bonhomme de chemin et attends le signal de
thread_2 pour se libérer)
thread_2 termine son traitement. Il envoie le signal à thread_1 qu'il a
terminé.
thread_1 fini son execution, vérifie que le signal est bien arrivé
avant de se terminer. L'auto_ptr est libéré à la fin de la portée.
Ce qui veut quand même dire que thread_1 ne peut pas se terminer tant
que thread_2 tourne. Mettons le cas suivant (que j'ai implémenté
avant-hier en version très simplifiée) :
thread_1 = calcul, qui a besoin d'afficher des graphiques de temps en
temps
thread_2 = gestion de l'affichage, multi-fenêtres, zoom, impression,
etc.
Le thread_1 passe au thread_2 les données graphiques, le thread_2 les
garde jusqu'à ce que la fenêtre soit fermée. Les données graphiques ne
sont pas forcément utiles au thread_1 pour la suite du calcul : il
aimerait pouvoir les supprimer dès que thread_2 en a accusé réception.
Mais pour thread_2, elles sont nécessaires jusqu'à la fermeture de la
fenêtre.
Pour concilier ça avec la visibilité des objets liée à la durée du
contexte qui les a créés, il faut au choix :
- que thread_2 recopie les données graphiques, pas très efficace ;
constructeur de copie du C++, diablement efficace au contraire. Mais là
- que thread_1 attende la fermeture de la fenêtre, ça rend l'utilisation
de threads plutôt inutile.
Pas forcément. L'intêret du multi thread, c'est qu'un programme fasse
euh, je commence à perdre le fil de cette partie là..
Je résume donc ma pensée :
1) L'objet dans le conteneur est toujours libéré à la destruction du
conteneur, c'est à dire à la fin de la portée dans laquelle se trouve
le conteneur.
pas de fuite à la sortie du programme.
2) On peut éventuellement (si on a envie quoi) libérer l'objet avant.
3) Si le conteneur est défini hors de la portée où on créer l'objet,
l'objet survit à la portée qui a vu sa création.
J'ai la nette impression que tu es en train de réinventer une version
bancale de la libération de resources par comptage de références. C'est
très bien, le comptage de références, mais il faut être conscient de
deux choses :
- D'une part, ça a une grosse limitation qui est que ça ne peut pas
gérer les structures de données circulaires. Ce n'est pas dramatique,
on peut s'arranger, mais ça n'est pas complètement automatique.
ça c'est vrai
- D'autre part, la vision que tu en as est une bouillie complètement
incompréhensible, et partant, inutilisable, car elle mélange deux
comptages de références complètement différents et incompatibles (un
vrai comptage de références, et le comptage uniquement des références
depuis une clôture).
Personnellement, je ne compte rien du tout. J'instancie, j'utilise..
Plus généralement, le problème de la durée de vie des resources est un
problème compliqué, qui est encore le sujet de recherches très actives.
Tu ne peux pas prétendre l'éliminer d'un revers de main « on alloue tout
sur la pile ». Ce genre d'allocation constitue un cas très efficace
utilisable dans les cas simples, mais n'est pas universel.
Je peux t'assurer que je l'utilise dans des cas "pas simples".
Laurent BERNE , dans le message <mn.0bcc7d4930031230.5426@laposte.net>,
sinon, on peut quand même envisager le cas suivant :
thread_1 initialise un auto_ptr.
thread_2 est démarré, récupère l'auto_ptr (pendant ce temps là,
thread_1 poursuit son bonhomme de chemin et attends le signal de
thread_2 pour se libérer)
thread_2 termine son traitement. Il envoie le signal à thread_1 qu'il a
terminé.
thread_1 fini son execution, vérifie que le signal est bien arrivé
avant de se terminer. L'auto_ptr est libéré à la fin de la portée.
Ce qui veut quand même dire que thread_1 ne peut pas se terminer tant
que thread_2 tourne. Mettons le cas suivant (que j'ai implémenté
avant-hier en version très simplifiée) :
thread_1 = calcul, qui a besoin d'afficher des graphiques de temps en
temps
thread_2 = gestion de l'affichage, multi-fenêtres, zoom, impression,
etc.
Le thread_1 passe au thread_2 les données graphiques, le thread_2 les
garde jusqu'à ce que la fenêtre soit fermée. Les données graphiques ne
sont pas forcément utiles au thread_1 pour la suite du calcul : il
aimerait pouvoir les supprimer dès que thread_2 en a accusé réception.
Mais pour thread_2, elles sont nécessaires jusqu'à la fermeture de la
fenêtre.
Pour concilier ça avec la visibilité des objets liée à la durée du
contexte qui les a créés, il faut au choix :
- que thread_2 recopie les données graphiques, pas très efficace ;
constructeur de copie du C++, diablement efficace au contraire. Mais là
- que thread_1 attende la fermeture de la fenêtre, ça rend l'utilisation
de threads plutôt inutile.
Pas forcément. L'intêret du multi thread, c'est qu'un programme fasse
euh, je commence à perdre le fil de cette partie là..
Je résume donc ma pensée :
1) L'objet dans le conteneur est toujours libéré à la destruction du
conteneur, c'est à dire à la fin de la portée dans laquelle se trouve
le conteneur.
pas de fuite à la sortie du programme.
2) On peut éventuellement (si on a envie quoi) libérer l'objet avant.
3) Si le conteneur est défini hors de la portée où on créer l'objet,
l'objet survit à la portée qui a vu sa création.
J'ai la nette impression que tu es en train de réinventer une version
bancale de la libération de resources par comptage de références. C'est
très bien, le comptage de références, mais il faut être conscient de
deux choses :
- D'une part, ça a une grosse limitation qui est que ça ne peut pas
gérer les structures de données circulaires. Ce n'est pas dramatique,
on peut s'arranger, mais ça n'est pas complètement automatique.
ça c'est vrai
- D'autre part, la vision que tu en as est une bouillie complètement
incompréhensible, et partant, inutilisable, car elle mélange deux
comptages de références complètement différents et incompatibles (un
vrai comptage de références, et le comptage uniquement des références
depuis une clôture).
Personnellement, je ne compte rien du tout. J'instancie, j'utilise..
Plus généralement, le problème de la durée de vie des resources est un
problème compliqué, qui est encore le sujet de recherches très actives.
Tu ne peux pas prétendre l'éliminer d'un revers de main « on alloue tout
sur la pile ». Ce genre d'allocation constitue un cas très efficace
utilisable dans les cas simples, mais n'est pas universel.
Je peux t'assurer que je l'utilise dans des cas "pas simples".
Laurent BERNE , dans le message ,sinon, on peut quand même envisager le cas suivant :
thread_1 initialise un auto_ptr.
thread_2 est démarré, récupère l'auto_ptr (pendant ce temps là,
thread_1 poursuit son bonhomme de chemin et attends le signal de
thread_2 pour se libérer)
thread_2 termine son traitement. Il envoie le signal à thread_1 qu'il a
terminé.
thread_1 fini son execution, vérifie que le signal est bien arrivé
avant de se terminer. L'auto_ptr est libéré à la fin de la portée.
Ce qui veut quand même dire que thread_1 ne peut pas se terminer tant
que thread_2 tourne. Mettons le cas suivant (que j'ai implémenté
avant-hier en version très simplifiée) :
thread_1 = calcul, qui a besoin d'afficher des graphiques de temps en
temps
thread_2 = gestion de l'affichage, multi-fenêtres, zoom, impression,
etc.
Le thread_1 passe au thread_2 les données graphiques, le thread_2 les
garde jusqu'à ce que la fenêtre soit fermée. Les données graphiques ne
sont pas forcément utiles au thread_1 pour la suite du calcul : il
aimerait pouvoir les supprimer dès que thread_2 en a accusé réception.
Mais pour thread_2, elles sont nécessaires jusqu'à la fermeture de la
fenêtre.
Pour concilier ça avec la visibilité des objets liée à la durée du
contexte qui les a créés, il faut au choix :
- que thread_2 recopie les données graphiques, pas très efficace ;
constructeur de copie du C++, diablement efficace au contraire. Mais là
- que thread_1 attende la fermeture de la fenêtre, ça rend l'utilisation
de threads plutôt inutile.
Pas forcément. L'intêret du multi thread, c'est qu'un programme fasse
euh, je commence à perdre le fil de cette partie là..
Je résume donc ma pensée :
1) L'objet dans le conteneur est toujours libéré à la destruction du
conteneur, c'est à dire à la fin de la portée dans laquelle se trouve
le conteneur.
pas de fuite à la sortie du programme.
2) On peut éventuellement (si on a envie quoi) libérer l'objet avant.
3) Si le conteneur est défini hors de la portée où on créer l'objet,
l'objet survit à la portée qui a vu sa création.
J'ai la nette impression que tu es en train de réinventer une version
bancale de la libération de resources par comptage de références. C'est
très bien, le comptage de références, mais il faut être conscient de
deux choses :
- D'une part, ça a une grosse limitation qui est que ça ne peut pas
gérer les structures de données circulaires. Ce n'est pas dramatique,
on peut s'arranger, mais ça n'est pas complètement automatique.
ça c'est vrai
- D'autre part, la vision que tu en as est une bouillie complètement
incompréhensible, et partant, inutilisable, car elle mélange deux
comptages de références complètement différents et incompatibles (un
vrai comptage de références, et le comptage uniquement des références
depuis une clôture).
Personnellement, je ne compte rien du tout. J'instancie, j'utilise..
Plus généralement, le problème de la durée de vie des resources est un
problème compliqué, qui est encore le sujet de recherches très actives.
Tu ne peux pas prétendre l'éliminer d'un revers de main « on alloue tout
sur la pile ». Ce genre d'allocation constitue un cas très efficace
utilisable dans les cas simples, mais n'est pas universel.
Je peux t'assurer que je l'utilise dans des cas "pas simples".
et si le thread 2 est plus rapide et libère la ressource avant que le
thread 1 ait terminé son traitement dessus ?
Il se passe quoi ?
Si tu sais dès le départ que thread_1 aura terminé d'utiliser la
ressource et la passera à thread_2, je vois pas trop l'intérêt de faire
du multi threads.
constructeur de copie du C++, diablement efficace au contraire.
Ce n'est pas moi qui est défini la condition de base "que le thread
allocateur attende gentiment la fin".
En plus, à ce que j'en sais de Java et C#, les pointeurs y sont
complétement absents.
Ne connaissant pas Perl ni python, je ne sais pas comment cela se passe
dans ces langages. Là je suis preneur d'info..
et si le thread 2 est plus rapide et libère la ressource avant que le
thread 1 ait terminé son traitement dessus ?
Il se passe quoi ?
Si tu sais dès le départ que thread_1 aura terminé d'utiliser la
ressource et la passera à thread_2, je vois pas trop l'intérêt de faire
du multi threads.
constructeur de copie du C++, diablement efficace au contraire.
Ce n'est pas moi qui est défini la condition de base "que le thread
allocateur attende gentiment la fin".
En plus, à ce que j'en sais de Java et C#, les pointeurs y sont
complétement absents.
Ne connaissant pas Perl ni python, je ne sais pas comment cela se passe
dans ces langages. Là je suis preneur d'info..
et si le thread 2 est plus rapide et libère la ressource avant que le
thread 1 ait terminé son traitement dessus ?
Il se passe quoi ?
Si tu sais dès le départ que thread_1 aura terminé d'utiliser la
ressource et la passera à thread_2, je vois pas trop l'intérêt de faire
du multi threads.
constructeur de copie du C++, diablement efficace au contraire.
Ce n'est pas moi qui est défini la condition de base "que le thread
allocateur attende gentiment la fin".
En plus, à ce que j'en sais de Java et C#, les pointeurs y sont
complétement absents.
Ne connaissant pas Perl ni python, je ne sais pas comment cela se passe
dans ces langages. Là je suis preneur d'info..
aucune donnée stockée dans la
portée de cette fonction ne peut survivre (sauf à utiliser
des variables 'static', mais c'est MAL).
Primo, c'est assez simple d'encapsuler la notion de thread dans une
classe.
aucune donnée stockée dans la
portée de cette fonction ne peut survivre (sauf à utiliser
des variables 'static', mais c'est MAL).
Primo, c'est assez simple d'encapsuler la notion de thread dans une
classe.
aucune donnée stockée dans la
portée de cette fonction ne peut survivre (sauf à utiliser
des variables 'static', mais c'est MAL).
Primo, c'est assez simple d'encapsuler la notion de thread dans une
classe.
Ouais, la jet set, les applis en monokini qui bronzent autour des
Autorelease Pools
Ouais, la jet set, les applis en monokini qui bronzent autour des
Autorelease Pools
Ouais, la jet set, les applis en monokini qui bronzent autour des
Autorelease Pools
Ben heuuu, http://www.tkzinc.org/index.php/Main/Screenshots , c'est du Tk,
mais avec un remplaçant sympa au canvas.
Ben heuuu, http://www.tkzinc.org/index.php/Main/Screenshots , c'est du Tk,
mais avec un remplaçant sympa au canvas.
Ben heuuu, http://www.tkzinc.org/index.php/Main/Screenshots , c'est du Tk,
mais avec un remplaçant sympa au canvas.
Le beau n'est pas universel mon ami.
Le beau n'est pas universel mon ami.
Le beau n'est pas universel mon ami.