Come modificare la prioritÓ del processo di un'applicazione che utilizza shell con Visual FoxPro

Traduzione articoli Traduzione articoli
Identificativo articolo: 193846 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

PrioritÓ di un processo determina la modalitÓ di programmazione l'esecuzione dal kernel di Win32. Eseguire pi¨ processi con prioritÓ pi¨ bassa rapidamente di processi con prioritÓ pi¨ alta. In questo articolo viene descritto come modificare la prioritÓ di processo di un'applicazione che utilizza shell.

Informazioni

Win32 supporta le classi di quattro prioritÓ riportate di seguito:
  • Inattivo
  • Normale
  • Alta
  • In tempo reale
InattivitÓ Ŕ la prioritÓ corretta per applicazioni di monitoraggio del sistema o gli screen saver.

Impostazione predefinita, che indica un processo senza speciali esigenze di pianificazione Ŕ di classe di prioritÓ normale.

PrioritÓ alta indica un processo che esegue attivitÓ urgenti che richiedono l'esecuzione immediata perchÚ possa funzionare correttamente. I thread di un processo con prioritÓ alta classe superano i thread dei processi di classe di prioritÓ normale o inattiva. Un esempio Ŕ l'elenco di attivitÓ di Windows, che deve rispondere rapidamente quando chiamato dall'utente, indipendentemente dal carico sul sistema operativo. Utilizzare estrema attenzione quando si utilizza la classe a prioritÓ alta, poichÚ una classe a prioritÓ alta CPU applicazione pu˛ utilizzare disponibili in quasi tutti i cicli.

La prioritÓ in tempo reale indica un processo con prioritÓ pi¨ alta possibile. I thread di un processo di classe di prioritÓ in tempo reale superano i thread di tutti gli altri processi, inclusi processi del sistema operativo importanti operazioni. Ad esempio, un processo in tempo reale eseguito per pi¨ di un intervallo molto breve pu˛ causare delle cache del disco non implica lo svuotamento o causare il mouse per essere non risponde. Questo livello di prioritÓ quasi mai deve essere utilizzato.

PrioritÓ del processo Ŕ impostata per l'assegnazione di uno dei parametri della chiamata API CreateProcess.

Nell'esempio seguente di seguito viene illustrato l'esecuzione dell'applicazione Windows NOTEPAD in Windows NT 4.0 e nei sistemi operativi Windows successivi utilizzando una prioritÓ idle. La prioritÓ del processo viene controllata mediante la variabile 'dwCreationFlags' passata a CreateProcess(). DEFINEs per le quattro classi di prioritÓ supportati sono elencati nella parte superiore del programma di esempio.

Una volta Notepad.exe Ŕ in esecuzione, per esaminare la prioritÓ, avviare Windows Task Manager, selezionare la scheda processi, fare clic con il pulsante destro del mouse su Notepad.exe selezionare Imposta prioritÓ dal menu a comparsa.

Il percorso completo a Notepad.exe potrebbe essere necessario modifica nell'istruzione di assegnazione di variabile 'File2Run'.

Codice di esempio

   #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
						

Riferimenti

"Windows avanzate", le pagine di Jeffrey Richter, Microsoft Press, 92-103, Third Edition 1997 ISBN: 1-57231-548-2

ProprietÓ

Identificativo articolo: 193846 - Ultima modifica: giovedý 27 gennaio 2005 - Revisione: 3.4
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual FoxPro 3.0b Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Professional Edition
  • Microsoft Visual FoxPro 7.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 Professional Edition
  • Microsoft Visual FoxPro 9.0 Professional Edition
Chiavi:á
kbmt kbhowto KB193846 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 193846
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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