IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Handle windows, par où commencer ?


Sujet :

Threads & Processus C++

  1. #1
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut Handle windows, par où commencer ?
    Bonjour,
    je porte une application de Linux vers Windows.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    bool Process::isAlive(void) {
    	if(pid < 0)
    		return false;
    	int result = waitpid(pid, &rcode, WNOHANG);
    	if(result == 0)
    		return true;
    	else if(result > 0) {
    		pid = -1;
    		rcode = WEXITSTATUS(rcode);
    		return false; 
    	}
    	else
    		throw SystemException(errno, "process information");
    }
    Apparemment les processus et threads ne sont pas gérés de la même façon sous windows et linux.

    Après quelques recherches, j'ai compris qu'au lieu de waitpid je devais utiliser WaitForSingleObject, et des Handle (au lieu de pid). Sauf que j'ai du mal à trouver des infos sur les Handle windows. D'après ce que j'ai compris, c'est une sorte de pointeur d'un type obscur, que je manipule via une API mais pas directement.

    Est-ce que vous auriez des tuto sur les handle (ou des explications suffisamment détaillées pour s'en servir, un tuto quoi ) ?

  2. #2
    screetch
    Invité(e)
    Par défaut
    Le handle etant opaque, on s'en fout un peu des tutos dessus.
    Par contre, la doc de CreateProcess et de WaitForSingleObject est elle beaucoup plus interessante.
    (edit) ou CreateThread dans ton cas, puisque tu parles de threads

  3. #3
    Membre très actif Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 923
    Par défaut
    Créer puis attendre un processus sous windows, Ca peut donner un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
      STARTUPINFO startupInfo; // Structure définissant l'environnement de démarrage d'un processus
      PROCESS_INFORMATION processInfo;             // Information sur le processus exécuté
     
      // Initialise les variables nécessaires au lancement d'un process
      ZEROMEMORY(&startupInfo,sizeof(STARTUPINFO));
      ZEROMEMORY(&processInfo,sizeof(PROCESS_INFORMATION));
      startupInfo.cb = sizeof(STARTUPINFO);
     
    // Lancement du process à surveiller
    CreateProcess(NULL,ligneCommande,NULL,NULL,false,DETACHED_PROCESS,NULL,NULL,&startupInfo,&processInfo);
     
      // Attendre la fin d'exécution du process
      WaitForSingleObject(processInfo.hProcess,INFINITE);
     
      // Libération des handles alloués par CreateProcess
      CloseHandle(processInfo.hProcess);
      CloseHandle(processInfo.hThread);

  4. #4
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    J'avais oublié de passer le topic en résolu.

    Le code final version windows
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    bool Process::isAlive(void) {
    if(GetExitCodeProcess( reinterpret_cast<PROCESS_INFORMATION&>(pi).hProcess, &rcode ) != 0){
    	if(rcode != STILL_ACTIVE)
    		return false;
    	else
    		return true;
    }
    else
    	throw SystemException(errno, "process information");
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Divers] Par où commencer ?
    Par calogerogigante dans le forum Cobol
    Réponses: 6
    Dernier message: 03/03/2014, 10h22
  2. Utiliser le handle fourni par Windows
    Par corentin59 dans le forum Tcl/Tk
    Réponses: 0
    Dernier message: 15/10/2007, 14h11
  3. Lancer Windows par défaut au démarrage
    Par Hell dans le forum Administration système
    Réponses: 4
    Dernier message: 03/07/2005, 12h54
  4. Ouvrir le planificateur de tâches Windows par programme
    Par BBPlastique dans le forum Windows
    Réponses: 8
    Dernier message: 16/07/2004, 11h30
  5. Escamoter la barre Windows par programme
    Par Invité dans le forum Windows
    Réponses: 4
    Dernier message: 01/06/2004, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo