|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
DÉCOURVIR LES "BACKGROUND IO PRIORITY" DE VISTA
Information sur la source
Description
Décrouvrez ici une des nombreuses nouveautés apparue avec Vista, permettant de définir une priorité sur les IO de notre process ou thread courant. (utile pour les anti-virus, l'indexation, etc...) Cette classe propose des méthodes afin de modifier la priorité IO pour process et/ou thread. 2 méthodes sont là également pour indiquer si un process/thread n'est pas déjà en priorité faible sur les IO. Cela est vraiment simple à mettre en place, d'ou la simplicité de ce code. Microsoft à vraiment simplifier la chose merci aux équipes Windows ;)
Source
Imports System.Runtime.InteropServices
''' <summary>
''' Classe fournissant des méthodes permettant changer les priorités IO pour le process et thread courant.
''' </summary>
''' <remarks>Vista ou 2008 Server requit.</remarks>
Public Class IOPriority
Const THREAD_MODE_BACKGROUND_BEGIN As Integer = &H10000
Const THREAD_MODE_BACKGROUND_END As Integer = &H20000
Const PROCESS_MODE_BACKGROUND_BEGIN As Integer = &H100000
Const PROCESS_MODE_BACKGROUND_END As Integer = &H200000
Public Const ERROR_THREAD_MODE_ALREADY_BACKGROUND As Integer = &H400
Public Const ERROR_THREAD_MODE_NOT_BACKGROUND As Integer = &H401
Public Const ERROR_PROCESS_MODE_ALREADY_BACKGROUND As Integer = &H402
Public Const ERROR_PROCESS_MODE_NOT_BACKGROUND As Integer = &H403
Public Const ERROR_FAILED_TO_ENTER_BACKGROUND_MODE As Integer = -1
''' <summary>
''' Indique si le thread courant est en priorité faible sur les IO.
''' </summary>
''' <returns><b>True</b> si priorité faible.<b>False</b> sinon.</returns>
Public Shared Function IsThreadBackgroundMode() As Integer
Dim iret As Integer = False
Dim bIOBckMode As Boolean = SetThreadBackgroundMode(True)
If (bIOBckMode) Then
SetThreadBackgroundMode(False)
iret = ERROR_THREAD_MODE_NOT_BACKGROUND
Else
If Marshal.GetLastWin32Error() = ERROR_THREAD_MODE_ALREADY_BACKGROUND Then
iret = ERROR_THREAD_MODE_ALREADY_BACKGROUND
Else
iret = ERROR_FAILED_TO_ENTER_BACKGROUND_MODE
End If
End If
Return iret
End Function
''' <summary>
''' Indique si le process courant est en priorité faible sur les IO.
''' </summary>
''' <returns><b>True</b> si priorité faible.<b>False</b> sinon.</returns>
Public Shared Function IsProcessBackgroundMode() As Integer
Dim iret As Integer = False
Dim bIOBckMode As Boolean = SetProcessBackgroundMode(True)
If (bIOBckMode) Then
SetProcessBackgroundMode(False)
iret = ERROR_PROCESS_MODE_NOT_BACKGROUND
Else
If Marshal.GetLastWin32Error() = ERROR_PROCESS_MODE_ALREADY_BACKGROUND Then
iret = ERROR_PROCESS_MODE_ALREADY_BACKGROUND
Else
iret = ERROR_FAILED_TO_ENTER_BACKGROUND_MODE
End If
End If
Return iret
End Function
''' <summary>
''' Définit la priorité du process courant sur les IO.
''' </summary>
''' <param name="enable"><b>True</b> pour passer le process en priorité faible sur les IO. <b>False</b> pour restaurer une priorité normal sur les IO.</param>
''' <returns><b>True</b> si changement réussi.<b>False</b> en cas d'échec.</returns>
Public Shared Function SetProcessBackgroundMode(ByVal enable As Boolean) As Boolean
If CheckOsVersion() Then
Dim bret As Boolean = False
Dim hProcess As IntPtr = Process.GetCurrentProcess().Handle
If enable Then
bret = NativeMethods.SetPriorityClass(hProcess, PROCESS_MODE_BACKGROUND_BEGIN)
Else
bret = NativeMethods.SetPriorityClass(hProcess, PROCESS_MODE_BACKGROUND_END)
End If
Return bret
Else
Throw New Exception("Not supported by this Windows version.")
End If
End Function
''' <summary>
''' Définit la priorité du thread courant sur les IO.
''' </summary>
''' <param name="enable"><b>True</b> pour passer le thread en priorité faible sur les IO. <b>False</b> pour restaurer une priorité normal sur les IO.</param>
''' <returns><b>True</b> si changement réussi.<b>False</b> en cas d'échec.</returns>
Public Shared Function SetThreadBackgroundMode(ByVal enable As Boolean) As Boolean
If CheckOsVersion() Then
Dim bret As Boolean = False
Dim hThread As IntPtr = IntPtr.Zero
Try
hThread = ThreadHelper.GetCurentThread()
If enable Then
bret = NativeMethods.SetThreadPriority(hThread, THREAD_MODE_BACKGROUND_BEGIN)
Else
bret = NativeMethods.SetThreadPriority(hThread, THREAD_MODE_BACKGROUND_END)
End If
Catch ex As Exception
Finally
ThreadHelper.CloseHandle(hThread)
End Try
Return bret
Else
Throw New Exception("Not supported by this Windows version.")
End If
End Function
''' <summary>
''' Vérifie la version de Windows (Vista ou 2008 Server).
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Shared Function CheckOsVersion() As Boolean
If Environment.OSVersion.Version.Major >= 6 Then
Return True
Else
Return False
End If
End Function
End Class
Conclusion
Supporté par Vista et 2008 Server uniquement. Commentaires, notes comme d'habitudes...:) Merci.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Process thread mémory... [ par nicolas12 ]
bonjour a vousje cherche à lire et a stoquer sous forme de fichier toutes les plages mémoires qu'une application utilise, et a modifier automatiquemen
running process en vista [ par mortha ]
Bonjour j'aimerais savoir si quelqu'un a trouver un example de code pour obtenir les process en fonction sur vista comme on fesais sur XP car javais u
Pourcentage d'un processus thread ou process CPU [ par DavidT ]
Comme le gestionnaire de tache, il existe la possibilité de de visualiser sur un système NT la mémoire physique consommée par un process déterminé par
BackGround MSFlexGrid [ par gilardh ]
Boujour à tous,Comment puis-je adapter la taille d'un MSFlexGrid à son contenu.Je m'explique, comment eviter de voir le backColor quand on est en limi
Ouvrir un process [ par metos ]
J'ai une application qui tourne en invisble, c'est à dire qu'elle n'est visible que dans les processus. Mais j'aimerais pouvoir l'afficher lorsque je
détection process en cours sur windows terminal server [ par paco67 ]
Bonjour,Je recherche un moyen de tester si un process (excel par exemple) est lancé sur une session Terminal Server pour un utilisateur bien précis.J'
Comment savoir si un Thread est tjs en cours d'exécution [ par Onclick ]
Salut à tous,Comment savoir si un Thread est tjs en cours d'exécution, sachant que j'ai le handle de ce thread?Merci d'av,Onclick
pbm avec API Create thread (NT) [ par venomp ]
Bonjour à tous..J'ai récupere le source N°5856 de sephiro. Ca fonctionne très bien, même sur NT. Par contre, je n'arrive pas à l'adapter pour un des m
Process /Service [ par rmlp ]
Je souhaiterai retrouver le service rattaché à un process sous Win NT4. (en language Visual basic 6)J'ai plusieurs process de même nom mais chacun est
Besoin d'aide sur la manipulation de process [ par PurpleSkunk ]
Bonjour !J'ai besoin d'aide sur un problème de process pour un projet professionnel en cours.Je précise que tout doit se dérouler à travers une sessio
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|