1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| void kill_process(t_process *proc)
{
printf("kill process\n");
TerminateProcess(proc->pi.hProcess, 0);
printf("fin kill\n");
WaitForSingleObject(proc->pi.hProcess, INFINITE);
printf("fin attente\n");
CloseHandle(proc->pi.hProcess); /* Fermer le handle vers le processus */
CloseHandle(proc->pi.hThread);
proc->etat = 0;
}
t_process *create_process(t_process *proc, char *path)
{
if (proc != NULL && proc->etat == 1)
kill_process(proc);
if (proc == NULL)
{
if (my_test_malloc(proc = malloc(sizeof(*proc))) < 0)
return (NULL);
}
ZeroMemory(&(proc->si), sizeof(proc->si));
if (CreateProcess( path, /* Nom de l'exécutable */
NULL, /* Arguments de la ligne de commande */
NULL, /* Attributs de sécurité du nouveau processus (processus fils) */
NULL, /* Attributs de sécurité du thread principal */
FALSE, /* Le processus fils héritera t-il des handles du processus père */
0, /* Flags de création */
NULL, /* Variables d'environnement */
NULL, /* Répertoire courant */
&(proc->si), /* Paramètres d'initialisation du processus */
&(proc->pi) /* Informations sur le processus */ ))
{
proc->etat = 1;
return (proc);
}
return (NULL);
}
void *thread_vgo(void *ptr)
{
t_gobio *gobio = (t_gobio *)ptr;
gobio->proc_vgo = create_process(gobio->proc_vgo, "c:\\Program Files (x86)\\VGo\\VGoApp.exe");
return (NULL);
}
void *thread_tab(void *ptr)
{
t_gobio *gobio = (t_gobio *)ptr;
gobio->proc_tab = create_process(gobio->proc_tab, "c:\\Program Files (x86)\\TOOTI Visio\\TootiVisio.exe");
return (NULL);
}
void *thread_domo(void *ptr)
{
t_gobio *gobio = (t_gobio *)ptr;
int ret;
gobio->proc_domo = create_process(gobio->proc_domo, "C:\\Users\\Johan\\Documents\\test\\domotique\\bin\\Debug\\domotique.exe");
return (NULL);
}
void lunch_thread_app(t_gobio *gobio)
{
pthread_t thread;
pthread_t thread2;
pthread_t thread3;
pthread_create(&thread, NULL, thread_vgo, (void *)gobio);
pthread_create(&thread2, NULL, thread_tab, (void *)gobio);
pthread_create(&thread3, NULL, thread_domo, (void *)gobio);
} |
Partager