Bonsoir!
J'ai dans mon jeu du code de "serveur" que pour l'instant j'isole dans un thread à part. Dans une partie solo, le serveur doit tourner sur la machine locale et la partie client du jeu s'y connecte via le réseau (si on peut dire).
Après quelques discussions sur un autre forum, j'envisage de passer à un différent processus pour la partie serveur. J'ai toutefois quelques réticences, rapport princiapelement au débuggage.
J'ai donc procédé a un petit test aujourd'hui : lancer un processus simple a partir du jeu et voir comment le tout réagis (en debug puis en release).
J'ai mis en place ce code, avec une commande dans la console du jeu qui permet de lancer le processus. Le "controle" du processus est encapsulé dans une classe qui termine le processus enfant soit via une fonction soit dans le destructeur.
Pour lancer et terminer le processus, j'utilise boost::process (qui n'est pas encore dans boost). Le lancement du processus marche bien. J'ai pour l'instant une erreur lorsque j'appelle terminate() sur le processus enfant. Je n'ai pas encore cherché l'origine du problème mais ce n'est de toutes manières pas très important ici. Le fait est qu'une exception est levée puis loggée puis continue son chemin jusqu'à ce que l'application crash (un problème dans ma stratégie de gestion des erreur visiblement, mais c'est un autre problème).
Ce qui est problématique c'est que j'ai eu une exception et après quelques minutes d'analyse j'ai quitté le mode debug (sous visual studio 2008). J'ai continué de chercher l'origine du problème un moment.
Puis j'ai découvert que le procesus enfant était toujours en train de s'executer!
Je voudrais donc savoir, en tant que débutant dans le domaine multi-process, comment vous faites pour gérer ce genre de cas : comment faire pour que le processus enfant ai toujours une vie limitée par la vie du processus parent, même si le parent s'arrête de manière abrupte ("crash")?
Partager