Aide pour la gestion du temps et des applications

Aide pour la gestion du temps et des applications - C++ - Programmation

Marsh Posté le 15-08-2007 à 20:27:02    

Bonjour à tous,
 
Je m'adresseà vous aujourd'hui car j'ai besoin de l'avis d'experts pour essayer de résoudre qques problèmes dans la conception de mon programme.
 
En gros, si je me présente rapidement, je suis un doctorant qui travaille sur les aérosols et les changements climatiques et je pars d'ici 13 jours à 1050km du pôle Nord pour y installer mon appareil de mesure. Mais voilà, là je galère à faire le programme qui gère cet instrument.
 
Je vais vous détailler rapidement le fonctionnement pour que vous appréhendiez mieux les problèmes qui me sont posés.
 
Toutes les 5 min, on communique avec un détecteur de précipitation pour savoir si il pleut (ou neige) et si on peut ouvrir la boite pour faire la mesure.
S'il fait beau, on dit au piston qui est dans la boite : Pousse. Ce qui prend 10 secondes.
Ensuite, on lance un autre programme qui a déjà été écrit en C++ et qui fait l'acquisition des données pendant 1 min.
On dit au piston de se fermer.
 
Et hop la boucle est bouclée. Ca doit être automatique et fonctionner toute l'année et le programme est le seul à tourner sur un ordi (donc pas de pb de gestion des ressources)
 
Ca peut paraitre simple comme ça, mais ça me pose pleins de difficultés.
 
Pour la gestion du temps, on m'a conseillé d'utiliser le SDL et ça marche plutôt bien.
Là j'ai déjà codé un timer qui me remet au début de mon programme toutes les 5 min (avec des SDL GetTicks de temps en temps pour voir si on est environ à 5min).
J'ai réussi également à faire un SDL Delay pour attendre que le piston s'étire.
 
Mais là où j'ai des problèmes, c'est pour dire à l'autre application (celle qui communqiue, via une dll, avec mon appareil de mesure) de ne fonctionner qu'une minute toutes les 5 min.
Pour l'instant j'arrive à la lancer, mais je n'ai pas encore trouvé la solution pour la killer au bout d'une minute. J'ai essayé avec taskkill ou pskill, mais ça ne fonctionne pas (J'ai fait un : system("C:\\windows\\system32\\taskkill.exe monprog.exe" ) et un system("C:\\windows\\system32\\pskill.exe <monprog.exe>" ))  
 
Donc si vous pourriez m'aider làdessus ou m'aider à optimiser mon programme, ça serait vraiment très sympathique.
 
Merci d'avance
 
nainfe
 

Reply

Marsh Posté le 15-08-2007 à 20:27:02   

Reply

Marsh Posté le 15-08-2007 à 20:51:24    

Cette application ne peut-elle vraiment pas être modifiée pour ne fonctionner qu'une minute ?
Ce serait le plus simple, surtout si cette acquisition de données est écrite quelque part (j'imagine que c'est le cas), un kill brutal aboutissant sans doute à des données erronées (tronquées, par exemple), non ?

 

edit : et sinon, des idées de la raison pour laquelle pskill.exe ne fonctionne pas ? Parce que ce devrait pourtant être le cas... tu as un comportement particulier, un message d'erreur, quelque chose ?


Message édité par Elmoricq le 15-08-2007 à 20:55:03
Reply

Marsh Posté le 16-08-2007 à 00:30:45    

Effectivement, le kill serait un peu trop brutal et c'est plus simple de ne garder qu'1 min de données toutes les 5 minutes.
Je sais que le plus simple ça serait de modifier le programme de l'autre (qui a été super bien écrit) et d'intégrer mon timer dedans. Le problème c'est que c'est écrit en C++ (et moi j'ai l'habitude du C) et à l'aide de la librairie wxWidgets (qui m'est totalement inconnue) et donc j'ai beaucoup de mal à me retrouver dans son code et à trouver quoi modifier.
 
Et pour pskill, je n'avais aucun message d'erreur, rien. Mais bon si j'oublie cette idée, ce n'est plus une question d'actualité.
 
Si vous avez d'autres idées lumineuses, merci de m'en fait part.
 
Bonne journée
 
nainfe
 
 
 

Reply

Marsh Posté le 16-08-2007 à 07:53:31    

(mode troll on) maintenant que j'ai vu le degre de foirosite des solutions mises en oeuvre pour prendre des mesures climatiques, je vais un peu plus me mefier des resultats des etudes :D (mode troll off)
 
Bon, plus serieusement, pour fermer l'application C++ (qui manifestement possede une interface graphique, donc) tu peux peut-etre essayer de trouver la fenetre avec FindWindow puis lui envoyer le message windows WM_CLOSE?
 
Edit : et ne serait-il pas plus simple d'extraire du programme C++ la partie du code qui ton appareil de mesure via la dll et de l'integrer a ton programme C ?


Message édité par Ace17 le 16-08-2007 à 07:55:12
Reply

Marsh Posté le 16-08-2007 à 17:58:24    

:lol: Et justement notre étude va permettre d'améliorer les simulations des changements climatiques en apportant plus de précision sur les aérosols (qui sont beaucoup trop surestimés). Mais t'inquiète, pour la partie scientifique, je maîtrise l'exploitation des données, c'est juste qu'il faut que je trouve un moyen pour qu'elles arrivent jusqu'à moi.
 
 
Perso, je pense que l'idée de ton edit serait l'idéale, mais je manque vraiment de temps pour est sûr d'arriver à quelque chose de viable. Car le truc qui me chagrine, c'est que ça marche avec une interface graphique et donc je n'arrive pas à trouver le main() et l'ordre d'exécution du programme.
 
Mais promis, à mon retour du Pôle, je me repencherai sur le problème. Pour l'instant, je dois encore essayer d'intégrer la communication avec un datalogger et ensuite je testerai le truc à long terme.
 
Merci de votre aide
 
nainfe

Reply

Marsh Posté le 16-08-2007 à 22:30:03    

En ce cas, je serais toi, même si c'est crade je me pencherais plutôt sur la raison pour laquelle pskill ne semble pas fonctionner, car ça devrait. ;)
Ce peut être un problème de droits (lances-tu l'autre programme avec un autre compte ?), ou plus probablement le paramètre "monprog.exe" qui est erroné (ce n'est peut-être qu'un launcher, essaies de tracer ça avec process explorer).


Message édité par Elmoricq le 16-08-2007 à 22:30:12
Reply

Marsh Posté le 23-08-2007 à 01:41:46    

En fait je viens de comprendre que quand je faisais : system("C:\\monprog.exe" ) il arrêtait de faire fonctionner mon programme tant que je n'ai pas fermé manuellement la fenêtre. Donc ça explique surement pourquoi ça ne marchait pas ;-).
 
Donc 2 questions :  
Est-ce que vous savez ce que je peux utiliser d'autres que system(....) pour lancer une application et pour qu'il continue le programme.
Pour ceux qui connaissent la SDL, la solution pourrait être d'exécuter le system("C:\\monprog.exe" ) pendant 1 minute (peut être avec un SDL_SetTimer) mais bon pour l'instant tous mes essais sont infructueux.
 
 
Merci de bien vouloir m'aider
 
nainfe

Reply

Marsh Posté le 23-08-2007 à 08:21:44    

[TROLL MODE ON]
Je comprend mieux pourquoi les applis des scientifiques ne fonctionnent que boiteusement... Faudrait peut-être qu'ils apprennent à programmer réellement ou qu'il délègue cette tâche à des gens réellement compétent...
Si ton appli marche pas dans 13 jours, on va rire gris... bleu... vert... jaune...
[/TROLL MODE OFF]
 
Plus sérieusement, regarde les fonctions Win32 (puisque tu sembles tourner sous Windows).
ShellExecute et ShellExecuteEx.
 
Ces fonctions lancent un programme en te donnant son Handle.
Il te suffira d'attendre 1 mins et de tuer l'application avec cet Handle.

Message cité 1 fois
Message édité par christophe_d13 le 23-08-2007 à 08:23:03

---------------
http://www.ikalizer.fr
Reply

Marsh Posté le 23-08-2007 à 09:22:16    

Ca me rappelle quelque chose que Dijstra a ecrit:

Citation :

In the good old days physicists repeated each other's experiments, just to be sure. Today they stick to FORTRAN, so that they can share each other's programs, bugs included.


Message édité par Un Programmeur le 23-08-2007 à 09:23:09
Reply

Marsh Posté le 23-08-2007 à 10:07:08    

nainfe a écrit :

En fait je viens de comprendre que quand je faisais : system("C:\\monprog.exe" ) il arrêtait de faire fonctionner mon programme tant que je n'ai pas fermé manuellement la fenêtre. Donc ça explique surement pourquoi ça ne marchait pas ;-).
 
Donc 2 questions :  
Est-ce que vous savez ce que je peux utiliser d'autres que system(....) pour lancer une application et pour qu'il continue le programme.
Pour ceux qui connaissent la SDL, la solution pourrait être d'exécuter le system("C:\\monprog.exe" ) pendant 1 minute (peut être avec un SDL_SetTimer) mais bon pour l'instant tous mes essais sont infructueux.
 
 
Merci de bien vouloir m'aider
 
nainfe


 
Tu peux creer un deuxieme thread (la SDL te le permet d'ailleurs) et appeler system a partir de ce deuxieme thread. Tu peux aussi appeler CreateProcess, de l'api Win32, pour lancer directement ton programme. L'avantage de CreateProcess par rapport a system, dans ton cas, c'est que tu peux recuperer un handle vers le processus que tu as lance, et en faire plein de choses (comme par exemple attendre que le process se termine ou non, appeler TerminateProcess (ce qui sera plus propre que pskill.exe)

Reply

Marsh Posté le 23-08-2007 à 10:07:08   

Reply

Marsh Posté le 23-08-2007 à 10:08:18    

christophe_d13 a écrit :


[TROLL MODE ON]
Je comprend mieux pourquoi les applis des scientifiques ne fonctionnent que boiteusement... Faudrait peut-être qu'ils apprennent à programmer réellement ou qu'il délègue cette tâche à des gens réellement compétent...
Si ton appli marche pas dans 13 jours, on va rire gris... bleu... vert... jaune...
[/TROLL MODE OFF]


Si les scientifiques savaient programmer, a quoi on servirait nous ? :D

Message cité 1 fois
Message édité par Ace17 le 23-08-2007 à 10:08:40
Reply

Marsh Posté le 23-08-2007 à 15:09:34    

Ace17 a écrit :


Si les scientifiques savaient programmer, a quoi on servirait nous ? :D


S'ils savaient programmer, on aurait peut-être une météo plus "juste"...  :pt1cable:  
 
 
nainfe> Bon courage, mais à mon avis tu devrais te faire aider par un programmeur. Quelqu'un qui maîtrise réellement...
ça évitera que ton programme plante au moment impromptu ou que les données sont corrumpues.
 


---------------
http://www.ikalizer.fr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed