您目前已離線,請等候您的網際網路重新連線

如何修改與 Visual FoxPro shelled 應用程式的處理程序優先順序

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:193846
結論
處理序的優先順序會決定其執行由 Win32 核心的排程方式。具有較高優先順序的處理程序比低優先順序的處理程序更快速地執行。本文將告訴您,如何修改 shelled 應用程式的處理序優先權。
其他相關資訊
Win32 支援下列四種優先順序類別:
  • 閒置
  • 標準模式
  • 即時
閒置是正確的優先順序,系統監視應用程式或螢幕保護裝置。

一般優先權類別是指出沒有特殊的排程需求與處理程序預設選項。

高優先順序指示執行需要立即執行,讓它正常執行的時間要徑任務的處理程序。高優先順序類別處理程序的引線會正常或閒置優先順序類別處理程序的引線。範例是由使用者不管作業系統上負載呼叫時必須快速回應 [Windows 工作清單。極端謹慎使用時使用高優先順序] 類別 (因為高優先順序類別 CPU 繫結應用程式可以使用幾乎所有可用的循環)。

即時優先順序指出序具有最高的可能優先權。即時優先順序類別處理程序的引線會處理程序的引線所有其他,包括作業系統處理程序執行重要的工作。比方說即時處理程序的執行超過在相當短的時間間隔可能會造成磁碟快取不到排清或造成滑鼠沒有回應。幾乎永遠不應使用此優先順序。

處理序的優先順序是由所指派的其中一個 CreateProcess API 呼叫參數設定。

下列範例會示範在執行 Windows 記事本應用程式在 Windows NT 4.0 及更新版本 Windows 作業系統使用閒置的優先順序。處理的優先順序是由 'dwCreationFlags' 變數傳遞至 CreateProcess() 所控制。四個支援的優先權類別的 DEFINEs 詳列頂端的範例程式。

一次 Notepad.exe 正在執行,來檢查優先順序,啟動 [Windows 工作管理員、 選取 [處理程序] 索引標籤、 Notepad.exe] 上按一下滑鼠右鍵並從快顯功能表選取 [設定優先順序。

完整路徑名稱來 Notepad.exe 可能需要修改工作分派陳述式的變數 'File2Run' 中。

範例程式碼

   #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						
参考
[進階的 Windows],Jeffrey Richter Microsoft 按頁面 92-103,第三的版 1997 ISBN: 1-57231-548-2
kbVFp600 kbAPI

警告:本文為自動翻譯

內容

文章識別碼:193846 - 最後檢閱時間:01/27/2005 08:34:21 - 修訂: 3.4

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

  • kbmt kbhowto KB193846 KbMtzh
意見反應