Comment modifier la priorité du processus d'une application shell avec Visual FoxPro

Traductions disponibles Traductions disponibles
Numéro d'article: 193846 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Priorité d'un processus détermine comment son exécution est planifiée par le noyau Win32. Processus ayant une priorité plus élevée s'exécutent plus rapidement que les processus avec une priorité plus faible. Cet article décrit comment modifier la priorité de processus d'une application shell.

Plus d'informations

Win32 prend en charge les classes de quatre priorité suivantes :
  • Inactif
  • Normal
  • Haute
  • En temps réel
Inactif est la priorité correcte pour les applications de surveillance système ou écrans de veille.

Classe de priorité normal est la valeur par défaut, indiquant un processus avec aucun des besoins de planification particuliers.

Priorité élevée indique un processus qui effectue les tâches critiques nécessitant une exécution immédiate pour qu'il puisse s'exécuter correctement. Les threads d'un processus de classe de priorité élevée devancent les threads du processus de classe de priorité normal ou inactif. Par exemple, la liste des tâches Windows, qui doit répondre rapidement lorsqu'elle est appelée par l'utilisateur, quel que soit la charge sur le système d'exploitation. Soyez plus grand soin lors de l'utilisation de la classe de priorité élevée, car une classe de priorité élevée liées aux UC application peut utiliser des cycles presque tous disponibles.

La priorité en temps réel indique un processus qui possède la priorité la plus élevée. Les threads d'un processus de classe de priorité en temps réel devancent les threads de tous les autres processus, y compris les processus du système d'exploitation effectuer des tâches importantes. Par exemple, un processus en temps réel qui s'exécute pendant plus qu'un bref intervalle peut provoquer des caches disque pas vider ou provoquer la souris pour être ne répond pas. Cette priorité presque ne doit jamais être utilisée.

Priorité du processus est définie en attribuant l'un des paramètres de l'appel CreateProcess API.

L'exemple suivant illustre l'exécution de l'application Bloc-notes de Windows sous Windows NT 4.0 et ultérieure systèmes d'exploitation de Windows à l'aide d'une priorité inactive. La priorité du processus est contrôlée par la variable 'dwCreationFlags' passée à CreateProcess(). DEFINEs pour les quatre classes de priorité pris en charge sont répertoriés en haut de l'exemple de programme.

Une fois Notepad.exe est arrêt, aux examiner la priorité, démarrez le Gestionnaire des tâches Windows, sélectionnez le processus onglet, cliquez avec le bouton droit sur Notepad.exe puis «Définir la priorité» dans le menu contextuel.

Le chemin d'accès qualifié complet vers Notepad.exe peut être nécessaire de modification dans l'instruction d'assignation de variable 'File2Run'.

Exemple de code

   #DEFINE NORMAL_PRIORITY_CLASS 32
   #DEFINE IDLE_PRIORITY_CLASS 64
   #DEFINE HIGH_PRIORITY_CLASS 128
   #DEFINE REALTIME_PRIORITY_CLASS 1600

   DECLARE INTEGER CreateProcess IN kernel32.DLL ;
      INTEGER lpApplicationName, ;
      STRING lpCommandLine, ;
      INTEGER lpProcessAttributes, ;
      INTEGER lpThreadAttributes, ;
      INTEGER bInheritHandles, ;
      INTEGER dwCreationFlags, ;
      INTEGER lpEnvironment, ;
      INTEGER lpCurrentDirectory, ;
      STRING @lpStartupInfo, ;
      STRING @lpProcessInformation

   DECLARE INTEGER GetLastError IN kernel32.DLL

   * Startup info is 68 bytes, of which we need to
   * initially populate the 'cb' or Count of Bytes member
   * with the overall length of the structure.
   * The remainder should be 0-filled.
   START = long2str(68) + REPLICATE(CHR(0), 64)

   * PROCESS_INFORMATION structure is 4 longs,
   * or 4*4 bytes = 16 bytes, which we'll initially zero.
   process_info = REPLICATE(CHR(0), 16)

   * Start a copy of NOTEPAD (EXE name must be null-terminated)
   File2Run = "C:\WINNT\NOTEPAD.EXE" + CHR(0)

   * Call CreateProcess, obtain a process handle. Treat the
   * application to run as the 'command line' argument, accept
   * all other defaults. Important to pass the start and
   * process_info by reference.
   RetCode = CreateProcess(0, File2Run, 0, 0, 1, ;
      IDLE_PRIORITY_CLASS, 0, 0, @START, @process_info)

   * Unable to run, exit now.
   IF RetCode = 0
      =MESSAGEBOX("Error occurred. Error code: ", GetLastError())
      RETURN
   ENDIF

   ********************
   FUNCTION long2str
   ********************
   * passed : 32-bit non-negative numeric value (m.longval)
   * returns : ascii character representation of passed
   *    value in low-high format (m.retstr)
   * example :
   *   m.long = 999999
   *   m.longstr = long2str(m.long)
   PARAMETERS m.longval

   PRIVATE i, m.retstr

   m.retstr = ""
   FOR i = 24 TO 0 STEP -8
      m.retstr = CHR(INT(m.longval/(2^i))) + m.retstr
      m.longval = MOD(m.longval, (2^i))
   NEXT
   RETURN m.retstr
						

Références

«Windows avancées», Jeffrey Richter, Microsoft Press, pages 92-103, troisième édition 1997, ISBN: 1-57231-548-2

Propriétés

Numéro d'article: 193846 - Dernière mise à jour: jeudi 27 janvier 2005 - Version: 3.4
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual FoxPro 3.0b Édition standard
  • Microsoft Visual FoxPro 5.0 Édition standard
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Édition Professionnelle
  • Microsoft Visual FoxPro 7.0 Édition professionnelle
  • Microsoft Visual FoxPro 8.0 Édition Professionnelle
  • Microsoft Visual FoxPro 9.0 Professional Edition
Mots-clés : 
kbmt kbhowto KB193846 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 193846
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com