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

MFC Discussion :

processus et UC


Sujet :

MFC

  1. #1
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut processus et UC
    bonjour,
    je cherche à savoir quand est-ce qu'un processus n'utilise plus le processeur. (par exemple on voit dans le gestionnaire des taches le pourcentage de processeur utilisée pour chaque appli qui tourne )

    j'arrive déjà a lister les processus et à prendre celui que je veux :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    void ListerProcess(void)
    {
     
    	HANDLE hSnap;
    	PROCESSENTRY32 wEntry;
    	int wIndex;
     
    	// Création d'une photo du système
    	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    	if(hSnap == (HANDLE)-1)
    	{
    		MessageBox(NULL, TEXT("Erreur !!!"), NULL, MB_OK);
    		return;
    	}
     
    	wEntry.dwSize = sizeof(wEntry);
    	// On liste les process
    	if(Process32First(hSnap, &wEntry) == TRUE)
    	{		
    		while(Process32Next(hSnap, &wEntry)) 
    		{
    			//MessageBox(NULL, wEntry.szExeFile, NULL, MB_OK);
    			if(strcmp(wEntry.szExeFile,"APPLI.EXE")==0){
     
    	//trouver si APPLI.EXE utilise de l'UC
    			}
    		}
    	}
     
    	// On libère le snapshot
    	CloseHandle(hSnap);
    }

  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
    Attention avec CreateToolhelp32Snapshot, tu travailles sur un dump, donc le process peut s'être terminé entre temps. Cela dit c'est valable tout le temps.
    Une solution simple c'est d'utiliser WaitForInputIdle. A priori si le process ne fait rien c'est qu'il attend que l'utilisateur le sollicite et ça devrait marcher. Sinon c'est à toi à tester régulièrement son activité et à estimer quand c'est qu'il a fini...

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Salut, je n'ai pas trop aventuré le sujet, mais je crois qu'il faut aller regarder du coté des méthodes PSAPI comme GetProcessMemoryInfo(...) ou bien interroger les APIs natives de ntdll, comme NtQueryInformationProcess (voire ZwQueryInformationProcess)

  4. #4
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    oula ca a l'air compliqué...
    je vais me documenter sur ce que vous m'avez dit et je reviens plus tard

  5. #5
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    j'ai déjà essayé WaitForInputIdle :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    void ListerProcess(void)
    {
     
    	HANDLE hSnap;
    	PROCESSENTRY32 wEntry;
    	int wIndex;
    	DWORD ProcPid;
    	HANDLE hProc;
     
    	// Création d'une photo du système
    	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    	if(hSnap == (HANDLE)-1)
    	{
    		MessageBox(NULL, TEXT("Erreur !!!"), NULL, MB_OK);
    		return;
    	}
     
    	wEntry.dwSize = sizeof(wEntry);
    	// On liste les process
    	if(Process32First(hSnap, &wEntry) == TRUE)
    	{		
    		while(Process32Next(hSnap, &wEntry)) 
    		{
    			if(strcmp(wEntry.szExeFile,"APPLI.EXE")==0){
     
    				ProcPid=wEntry.th32ProcessID;
    				hProc = OpenProcess ( PROCESS_ALL_ACCESS, TRUE, ProcPid );
    				if ( !hProc ){
    					MessageBox(NULL, TEXT("Erreur !!!"), NULL, MB_OK);
    					return;
    				}
    				else
    					WaitForInputIdle(hProc,INFINITE); //je sais  pas si ce parametre existe mais il me met pas d'erreur :lol: 			}
    		}
    	}
    	// On libère le snapshot
    	CloseHandle(hSnap);
    }
    c'est pas très concluant

  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
    c'est pas très concluant
    Mais encore ?

    PS: il manque des CloseHandle.

  7. #7
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    et bien j'entend par là que ca ne marche pas..
    d'ailleurs j'ai vu sur le site de microsoft :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    La méthode WaitForInputIdle fonctionne uniquement avec les processus qui possèdent une interface utilisateur.
    mais ceci se trouve dans la partie C# et Visual basic
    mais si c'est aussi le cas en C++, c 'est donc normal que ca ne marche pas dans mon cas

    donc je vais regarder du coté de nico-pyright(c) maintenant

  8. #8
    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
    Oui c'est normal. Cette fonction détecte que le programme est bloqué sur GetMessage. C'est une des principales raisons pour qu'un processus "n'utilise plus le processeur". De quel type de processus s'agit-il ? Que fait-il ? Tu veux attendre qu'il se termine ou détecter qu'il ne fasse plus rien, et dans ce cas, dans quelle situtation ne fait-il plus rien ?

  9. #9
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    eh bien, en fait lorsque j'envoie quelque chose dans mon presse papier, le processus en question se met à faire un traitement et utilise de l'UC et je cherche à savoir quand ce processus a fini son traitement.
    en sachant que ce processus est independant de mon programme.

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    et pourquoi à la fin de ton envoi dans le presse papier, tu envoies pas un message à ton application pour dire que t'as fini ?

  11. #11
    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
    Comment le processus détecte-t-il qu'il y a quelque chose dans le pp ? Comment tu le lances ? Comment il se termine ? Que fait-il après avoir traité le contenu ?

  12. #12
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    et pourquoi à la fin de ton envoi dans le presse papier, tu envoies pas un message à ton application pour dire que t'as fini ?
    et bien le probleme c'est que j'aurai beau envoyé un message au processus pour dire que j'ai fini, je ne sais pas comment ce processus marche et donc il ne reconnaitra pas le message envoyé.

    Comment le processus détecte-t-il qu'il y a quelque chose dans le pp ? Comment tu le lances ? Comment il se termine ? Que fait-il après avoir traité le contenu ?
    ben ca j'en sais rien je le constate juste quand je teste l'application extérieur et son processus.
    le processus se lance lorsqu'on ouvre l'appli et il ne se termine pas tant que l'appli est ouverte.

Discussions similaires

  1. Processus paralleles
    Par Lyes dans le forum Threads & Processus
    Réponses: 4
    Dernier message: 11/02/2003, 13h04
  2. 1 variable pour 2 processus
    Par kacedda dans le forum POSIX
    Réponses: 2
    Dernier message: 11/02/2003, 06h32
  3. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18
  4. [VB6] [Système] Tuer un processus courant
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/10/2002, 14h47
  5. Réponses: 2
    Dernier message: 04/10/2002, 09h13

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