Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
198
Assunto : Visual Basic
Titulo: Alterar a prioridade de um processo por código

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



No sistema operacional cada aplicação que executamos é um processo. Esse processo controla todo o relacionamento da aplicação com o ambiente operacional. Mas não é o processo que ganha tempo de execução.

Dentro do processo existe uma Thread, uma unidade de execução da aplicação. Essa Thread é que ganha tempo de execução. Essa arquitetura permite que uma mesma aplicação crie várias Threads, fazendo assim com que várias tarefas sejam executadas simultaneamente (MultiThreading).

Provavelmente vocês já observaram no NT que ao clicar com o botão direito sobre um processo no task manager vocês tem uma opção "Prioridade". Cada processo tem um nível de prioridade e isso determina o quanto de processador que ele pode pegar.

Mas não é a Thread que ganha tempo de processador ? Sim. Dentro de um processo as Threads também possuem nível de prioridade, determinando o quanto pegarão de tempo do processador.

Podemos controlar os níveis de prioridade por código VB utilizando 6 funções da API :

SetPriorityClass : Determina a prioridade do processo
GetPriorityClass : Obtem a prioridade atual do processo
SetthreadPriority : Determina a prioridade da Thread
GetThreadPriority : Obtem a prioridade atual da Thread
GetCurrentThread : Obtem o handle da Thread atual para ser usado nas funções acima
GetCurrentProcess : Obtem o handle do processo atual para ser usado nas funções acima

Veja um exemplo em Vb no qual a prioridade do processo está sendo setada para low :

Const THREAD_BASE_PRIORITY_LOWRT = 15
Const THREAD_BASE_PRIORITY_MIN = -2
Const THREAD_BASE_PRIORITY_MAX = 2
Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
Const THREAD_PRIORITY_NORMAL = 0
Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Const HIGH_PRIORITY_CLASS = &H80
Const IDLE_PRIORITY_CLASS = &H40
Const NORMAL_PRIORITY_CLASS = &H20
Const REALTIME_PRIORITY_CLASS = &H100
Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As
Long, ByVal nPriority As Long) As Long
Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As
Long, ByVal dwPriorityClass As Long) As Long
Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As
Long) As Long
Private Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As
Long) As Long
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Sub Form_Load()
Dim hThread As Long, hProcess As Long
'retrieve the current thread and process
hThread = GetCurrentThread
hProcess = GetCurrentProcess
'set the new thread priority to "lowest"
SetThreadPriority hThread, THREAD_PRIORITY_LOWEST
'set the new priority class to "idle"
SetPriorityClass hProcess, IDLE_PRIORITY_CLASS
'print some results
Me.AutoRedraw = True
Me.Print "Current Thread Priority:" + Str$(GetThreadPriority(hThread))
Me.Print "Current Priority Class:" + Str$(GetPriorityClass(hProcess))
End Sub




Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 11/20/2012 8:23:00 AM
nome: Antonio
email: antonio@scharf.com.br
comentário:
Obrigado por compartilhar... gostei.

Mas tenho 1 dúvida...
Estas funções permitem alterar a prioridade do processo atual (CurrentProcess)..

Eu tenho 1 aplicação que abre instancias do Internet Explorer...
Set Internet = CreateObject("InternetExplorer.Application")
Internet.Navigate LINK

A pergunta é:
Como descobrir o número do Processo do "iexplore.exe" ?

Agradeço qualquer ajuda.
Antonio.


 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br