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

C++ Discussion :

utilisation de GetProcessTimes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Par défaut utilisation de GetProcessTimes
    bonjour ,

    je suis en train de faire un ptit prog qui me permetrai de recup des info sur les differents process tournant sur une machine et pour recuperer le temps pendant lequel le process a tourner jutilise GetProcessTimes que jai trouver sur la msdn (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocesstimes.asp)

    mais jai un souci
    voila la partie de mon code ou je cherche le temp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
        hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION |
                                        PROCESS_VM_READ,
                                        FALSE, processID );
        if (NULL == hProcess)
           return ""; 
    if(GetProcessTimes(hProcess,lpCreationTime,lpExitTime,lpKernelTime,lpUserTime)!=0){}
          cout<<"time::>"<<lpUserTime->dwLowDateTime;
    pour l'erreur ca me dit que je ne peut pas ecrire a ladresse memoire 0xcccccccc


    si qqun a deja utiliser cette fonction et vois ou jai oublier kkechose merci davance

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Pointeur non initialisé sûrement... Tu dois donner l'adresse de strcutures à remplir et non des adresses qui pointent nul part:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    FILETIME CreationTime;
    FILETIME ExitTime;
    FILETIME KernelTime;
    FILETIME UserTime;
     
    GetProcessTimes(
        hProcess,
        &CreationTime,
        &ExitTime,
        &KernelTime,
        &UserTime
    );

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Par défaut
    c'est surement une question conne mais comment j'initialise mes pointeurs je leur donne pas de valeur moi c'est des valeurs que je recupere en sortie de la fonctions non ?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Comme l'a dit et illustré Aurélien, tu dois passer des adresses de structures et non des pointeurs déclarés à l'arrache. Regarde son exemple.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Par défaut
    enfait l'initialisation je l'ai deja faite voila le code de ma fonction :

    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
    19
    20
    21
    22
    23
    24
     
    void GetTemp(DWORD processID)
    {
     
      HANDLE hProcess;
      LPFILETIME lpCreationTime=NULL;
      LPFILETIME lpExitTime=NULL;
      LPFILETIME lpKernelTime=NULL;
      LPFILETIME lpUserTime=NULL;
     
     
    	 hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION |
                                        PROCESS_VM_READ,
                                        FALSE, processID );
     
      if (NULL != hProcess)
      {
      	if (GetProcessTimes(hProcess,lpCreationTime,lpExitTime,lpKernelTime,lpUserTime)!=0)
    			cout<<"time ::>"<<lpUserTime->dwLowDateTime;
     
     
      }
      CloseHandle(hProcess);
    }
    en fait mon erreur arrive des que mon hprocess est different de 0 c'est à dire que des que la fonction GetProcessTimes est lancer mon executable plante.

    merci de votre aide parceque la je comprend pas :p

    je suis pas tres douer en programmation c++ je commence et je galere un peu avec ces fonctions que je trouve sur la msdn pour la gestion des process

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Tu n'as pas tout compris je crois...
    Ca plante si hProcess n'est pas nul car tu as mis un test si différent de nul... Tes pointeurs sont initialisés à NULL, c'est à dire à rien.
    Tes pointeurs ils servent à donner l'adresse d'une structure à remplir, ils doivent donc pointer vers une structure que GetProcessTimes va remplir.
    Toi tu pointes vers NULL = rien, le vide intersidéral en quelque sorte.
    pointeur sur le type X doit être initialisé avec l'adresse d'une variable du type X. Dans ton cas, ben le pointeur ne sert à rien en fait, il te faut juste passer l'adresse des structures comme je te le montre dans mon exemple.
    Un petit conseil de lecture:
    http://chgi.developpez.com/pointeur/

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Par défaut
    c'est bon merci en fait me suffisai juste de faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    HANDLE hProcess;
      PFILETIME tempCreation;
      PFILETIME tempExit;
      PFILETIME tempKernel;
      PFILETIME tempUser;
     
      tempCreation= new FILETIME;
      tempExit = new FILETIME;
      tempKernel = new FILETIME;
      tempUser = new FILTIME;
    merci de votre aide

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Non... Tu te compliques la vie pour rien.

    Citation Envoyé par Aurelien.Regat-Barrel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FILETIME CreationTime;
    FILETIME ExitTime;
    FILETIME KernelTime;
    FILETIME UserTime;
     
    GetProcessTimes(
        hProcess,
        &CreationTime,
        &ExitTime,
        &KernelTime,
        &UserTime
    );

  9. #9
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Tu te compliques, et tu crées des fuites de mémoire.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Par défaut
    non ca marche pas ca en fait il me faisai chier car il maddressai mal mon pointeur et essayer decrir a une adresse ou javai pas les droits decriture si je faisai pas les new

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je crois que tu as mal lu. Il y a une différence entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LPFILETIME CreationTime; // équivalent à LIFETIME* CreationTime
    GetProcessTimes(..., CreationTime, ...);
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FILETIME CreationTime;
    GetProcessTimes(..., &CreationTime, ...);
    Dans le 1er cas on envoie un pointeur non initialisé à la fonction, dans le second non (puisqu'on lui envoie l'adresse d'une variable).

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par alaparra
    il maddressai mal mon pointeur et essayer decrir a une adresse ou javai pas les droits decriture si je faisai pas les new
    C'est ça qu'on appelle un pointeur non initialisé. Il pointe n'importe où. Ce qui est différent d'un pointeur initialisé à NULL.
    Toi tu voulais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LPFILETIME lpCreationTime;
    C'est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FILETIME * lpCreationTime;
    le "LP" devant FILETIME signifie "Long Pointer" = pointeur sur FILETIME
    Pour l'initialiser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LPFILETIME lpCreationTime = new FILETIME;
    ...
    delete lpCreationTime;
    la même chose sans allocation dynamique mais en allouant sur la pile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FILETIME CreationTime;
    LPFILETIME lpCreationTime = &CreationTime;
    et encore en plus simple utiliser directement &CreationTime là ou on attend un LPFILETIME...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 53
    Par défaut
    ha ok bah merci pour ton aide precieuse :p

    et en fait je suis degouter la fonction fait pas ce que jattend d'elle mais bon jaurai appri kkes truc ca le fait

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

Discussions similaires

  1. GetProcessTimes pour % CPU d'utilisation par process
    Par sgrangier dans le forum Langage
    Réponses: 1
    Dernier message: 27/09/2005, 15h03
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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