Nesse vídeo demonstraremos a utilização da função KillUser, que serve para encerrar determinada conexão (thread) com o sistema.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "Protheus.ch" /*/{Protheus.doc} User Function zExe320 Formata uma string justificando o texto @type Function @author Atilio @since 25/02/2023 @see https://tdn.totvs.com/display/tec/KillUser @obs KillUser Parâmetros + UserName , Caractere , Nome do usuário conectado no SmartClient + ComputerName , Caractere , Nome do computador que esta com o SmartClient aberto + ThreadId , Numérico , Indica o número da Thread entre ao AppServer e SmartClient + ServerName , Caractere , Indica o servidor onde esta rodando o AppServer Retorno Função não tem retorno **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe320() Local aArea := GetArea() Local aThreads := {} Local nConexAtu := 1 Local nTentativa := 1 Local nMaxTenta := 10 //Pega todos os usuários conectados aThreads := GetUserInfoArray() //Enquanto houver tentativas para finalizar as threads While nTentativa <= nMaxTenta //Percorre todas as conexões For nConexAtu := 1 To Len(aThreads) //Se a thread da conexão atual for diferente da thread atual (senão vai matar o processo que mata todos) If aThreads[nConexAtu][3] != ThreadId() KillUser( aThreads[nConexAtu][1],; //UserName aThreads[nConexAtu][2],; //ComputerName aThreads[nConexAtu][3],; //ThreadId aThreads[nConexAtu][4]) //ServerName EndIf Next //Pega novamente todos os usuários conectados aThreads := GetUserInfoArray() //Se ainda houver registros, aumenta a tentativa e espera 1 segundo If Len(aThreads) > 1 nTentativa++ Sleep(1000) //Senão finaliza o laço de repetição Else Exit EndIf EndDo RestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.