Arrêt d'une commande
Modérateur : xcasadmin
Re: Arrêt d'une commande
J'observe aussi des segfault en faisant kill_thread, je pense que c'est parce qu'on ne devrait pas canceller un thread à n'importe quel moment. Il faudrait un traceback (bt sous gdb) pour avoir une petite idée d'où ça vient mais sans grand espoir. C'est pour ça que je préfère mettre ctrl_c à true et ne faire le kill_thread que si ctrl_c n'a pas marché au bout d'un certain temps.
Pour ifactor, je suis en train de coder un crible quadratique (MPQS) pour pouvoir factoriser "décemment" sans PARI (et je suis en train aussi de patcher tommath pour pouvoir éviter de perdre du temps avec des malloc dans les divisions).
Pour ifactor, je suis en train de coder un crible quadratique (MPQS) pour pouvoir factoriser "décemment" sans PARI (et je suis en train aussi de patcher tommath pour pouvoir éviter de perdre du temps avec des malloc dans les divisions).
Re: Arrêt d'une commande
Quelle est la différence antre ctrl_c à true ou false?C'est pour ça que je préfère mettre ctrl_c à true et ne faire le kill_thread que si ctrl_c n'a pas marché au bout d'un certain temps.
(Dans mon code, d'ailleurs, j'initialise ctr_c à true)
Vous voulez dire que le thread est interrompu brutalement?je pense que c'est parce qu'on ne devrait pas canceller un thread à n'importe quel moment
Il n'y a pas moyen que, lorsque kill_thread est invoqué,on activer un flag que l'on peut référencer dans les traitements pouvant être long ? (factorisation, boucle etc)
Re: Arrêt d'une commande
ctrl_c est une variable qui est testee par un certain nombre de fonctions de giac (par exemple les fonctions arithmetiques de base), et permet d'interrompre proprement le calcul (en liberant les ressources par exemple). Mais si on entre dans une boucle ou ctrl_c n'est pas testee, on peut y rester indefiniment, d'ou l'interet de pouvoir aussi arreter le thread de l'exterieur.loic a écrit :
Quelle est la différence antre ctrl_c à true ou false?
(Dans mon code, d'ailleurs, j'initialise ctr_c à true)
...
Vous voulez dire que le thread est interrompu brutalement?
Il n'y a pas moyen que, lorsque kill_thread est invoqué,on activer un flag que l'on peut référencer dans les traitements pouvant être long ? (factorisation, boucle etc)
Le role de ctrl_c est justement d'eviter un arret brutal du thread.
ctrl_c est remis a false par protecteval au debut, et comme protecteval est appele par make_thread la valeur que vous donnez a ctrl_c au debut n'a pas d'importance.
Re: Arrêt d'une commande
En fait, si je comprends bien, le crtl_c ne peux pas être testé par exemple dans certains outils externes à giac?
Sinon, il n'est pas possible qu'avec make_thread, on est, en plus, cette sécurité pour augmenter les chances d'interrompre proprement?
Sinon, il n'est pas possible qu'avec make_thread, on est, en plus, cette sécurité pour augmenter les chances d'interrompre proprement?
Re: Arrêt d'une commande
Si bien sur on peut tester ctrl_c en-dehors de giac mais je n'en vois pas trop l'interet. Par contre dans le thread qui controle (ou qui gere l'UI) on peut mettre ctrl_c a true, lancer une boucle de temporisation de 1 ou 2 secondes, puis si le thread de calcul ne s'est pas arrete gentiment, faire kill_thread(true,contextptr) pour le tuer brutalement.
Re: Arrêt d'une commande
Ah c'est intéressant cette option.
donc, comment peut-on procéder pour activer ctrl_c à true dans le thread créé par la commande make_thread?
donc, comment peut-on procéder pour activer ctrl_c à true dans le thread créé par la commande make_thread?
Re: Arrêt d'une commande
ctrl_c est une variable partagee par tous les threads, il suffit donc de la changer depuis le thread de l'UI.
Re: Arrêt d'une commande
Super, ça marche! (Je n'en reviens pas, les efforts valaient le coup)
En tout cas, merci pour toutes les précieuses réponses apportées.
j'ai commité le tout, vous pouvez faire des essais (git pull dans votre répertoire d'origine).
Dans un premier temps, pendant 2 s, le programme essaye avec ctrl_c=true.
Si la tâche ne s'interrompt pas, alors message d'avertissement puis tentative avec kill_thread.
Globalement, ça crashe très peu à présent. De plus, ctrl_c=true ne semble provoquer aucun crash quand il réussit.
En tout cas, merci pour toutes les précieuses réponses apportées.
j'ai commité le tout, vous pouvez faire des essais (git pull dans votre répertoire d'origine).
Dans un premier temps, pendant 2 s, le programme essaye avec ctrl_c=true.
Si la tâche ne s'interrompt pas, alors message d'avertissement puis tentative avec kill_thread.
Globalement, ça crashe très peu à présent. De plus, ctrl_c=true ne semble provoquer aucun crash quand il réussit.
Re: Arrêt d'une commande
Bonsoir,
Sauf erreur dans ma mise à jour expand((a+b+c)^120) fait apparaître le bouton stop immédiatement et impossible de stopper, 1mn15 environ pour afficher le résultat
Sauf erreur dans ma mise à jour expand((a+b+c)^120) fait apparaître le bouton stop immédiatement et impossible de stopper, 1mn15 environ pour afficher le résultat
Re: Arrêt d'une commande
Oui, c'est un problème que je n'ai pas encore attaqué.
En fait, ce qui bolque l'affichage, c'est la création du composant graphique affichant la réponse (elle est un peu longue cette réponse, hein! )
D'ailleurs, chez moi, ce composant est tellement lourd à gérer que cela gène ensuite le scroll dela feuille de calcul.
Tiens, je m'aperçois que dans Xcas, il n'affiche pas la réponse.
Surement que c'est un comportement par défaut à définir pour les réponses trop longues comme celles-ci
En fait, ce qui bolque l'affichage, c'est la création du composant graphique affichant la réponse (elle est un peu longue cette réponse, hein! )
D'ailleurs, chez moi, ce composant est tellement lourd à gérer que cela gène ensuite le scroll dela feuille de calcul.
Tiens, je m'aperçois que dans Xcas, il n'affiche pas la réponse.
Surement que c'est un comportement par défaut à définir pour les réponses trop longues comme celles-ci
Re: Arrêt d'une commande
Oui, je limite a une taille maxi dans xcas pour eviter ces problemes.
Re: Arrêt d'une commande
Tiens, par curioisté, vous créez l'affichage "pretty print" directement du gen ou à partir de la chaine obtenue avec print(gen)?