MANTER UM SERVICO.
Olá pessoal,
estou criando um Windows Service em VB, como ele vai ser rodado com a maquina sem logar então não posso ter Forms dentro do aplicativo. Coloquei um loop eterno com doevents para mante-lo no ar, mas esse loop está consumindo 100% do CPU, está certo que o doevents libera para que possamos usar outras aplicações, mas temo que esquente d+ o processador ou coisa parecida, alguem tem uma idéia para colocar no lugar desse loop eterno?
estou criando um Windows Service em VB, como ele vai ser rodado com a maquina sem logar então não posso ter Forms dentro do aplicativo. Coloquei um loop eterno com doevents para mante-lo no ar, mas esse loop está consumindo 100% do CPU, está certo que o doevents libera para que possamos usar outras aplicações, mas temo que esquente d+ o processador ou coisa parecida, alguem tem uma idéia para colocar no lugar desse loop eterno?
Que tal um timer através da API Sleep
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Ex.:
Sleep 5000
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Ex.:
Sleep 5000
Valeu pela dica, mas estou fazendo conecções winsock e o Sleep me impede de conectar... eu preciso que o VB fique esperando eventos para trabalhar, e não saia do programa, com Form isso é fácil, sem eles não to achando um meio de fazer... é como se fosse um Sleep eterno que seja interrompido na chegada de um evento e depois de processa-lo ele volte a Sleep...
Renato Sucoski
Renato Sucoski
Voce esta fazendo conexoes? sem parar?
Pois se voce estiver aguardando uma solicitacao de conexao existe um evento e nao precisa ficar em loop.
Tem como colocar o trecho do codigo?
Pois se voce estiver aguardando uma solicitacao de conexao existe um evento e nao precisa ficar em loop.
Tem como colocar o trecho do codigo?
A sub Main
Private Alvo As New clsFuncional
Sub Main()
Alvo.Abrir
Do While Alvo.Continua
DoEvents
Loop
End Sub
Agora a Classe Funcional...
Option Explicit
Private WithEvents Server As CSocketMaster
Private cClients() As clsClients
Private Cont As Integer
Private vContinua As Boolean
Public Property Get Continua() As Boolean
Continua = vContinua
End Property
Private Sub Class_Initialize()
Set Server = New CSocketMaster
Cont = 0
vContinua = True
End Sub
Public Sub Abrir()
Server.LocalPort = 3470
Server.Listen
End Sub
Private Sub Server_ConnectionRequest(ByVal RequestID As Long)
Dim A As Integer
Dim Usuario As String
Cont = Cont + 1
ReDim Preserve cClients(Cont)
Set cClients(Cont) = New clsClients
cClients(Cont).Aceita RequestID
End Sub
Private Alvo As New clsFuncional
Sub Main()
Alvo.Abrir
Do While Alvo.Continua
DoEvents
Loop
End Sub
Agora a Classe Funcional...
Option Explicit
Private WithEvents Server As CSocketMaster
Private cClients() As clsClients
Private Cont As Integer
Private vContinua As Boolean
Public Property Get Continua() As Boolean
Continua = vContinua
End Property
Private Sub Class_Initialize()
Set Server = New CSocketMaster
Cont = 0
vContinua = True
End Sub
Public Sub Abrir()
Server.LocalPort = 3470
Server.Listen
End Sub
Private Sub Server_ConnectionRequest(ByVal RequestID As Long)
Dim A As Integer
Dim Usuario As String
Cont = Cont + 1
ReDim Preserve cClients(Cont)
Set cClients(Cont) = New clsClients
cClients(Cont).Aceita RequestID
End Sub
Sim, tenho eventos... Mas se eu não fizer o loop, dae o programa termina, ele não fica esperando os eventos acontecerem... e não consigo colocar eventos em Módulo, só em classes...
?
Tópico encerrado , respostas não são mais permitidas