Thread no BANSHEE
Funcionamento e funções
Thread
Thread é um pequeno programa que trabalha como um subsistema, sendo uma forma de um processo se autodividir em duas ou mais tarefas. É o termo em inglês para Linha ou Encadeamento de Execução. Essas tarefas múltiplas podem ser executadas simultaneamente para rodar mais rápido do que um programa em um único bloco ou praticamente juntas, mas que são tão rápidas que parecem estar trabalhando em conjunto ao mesmo tempo. Um reprodutor de video, atua com inumeros processos ao mesmo tempo, e o banshee é um exemplo disso, utilizando threads para um melhor desempenho.
Inicialização da thread

Utilização da thread para autenticar usuário
Para efetuar o login:
public void Login (string username, string password) {
fetcher.Username = username;
fetcher.Password = password;
try {
bag = ContentCodeBag.ParseCodes (fetcher.Fetch ("/content-codes"));
ContentNode node = ContentParser.Parse (bag, fetcher.Fetch ("/login"));
ParseSessionId (node);
FetchDatabases ();
Refresh ();
// Se a informação do servidor estiver correta, atualizada e disponivel, será criada
// uma thread para encontrar o usuario*/
if (serverInfo.SupportsUpdate) {
updateRunning = true;
Thread thread = new Thread (UpdateLoop);
thread.Name = "DAAP";
thread.IsBackground = true;
thread.Start ();
}
}
}
O bloco try
é um bloco "protegido" porque, caso ocorra algum problema com os comandos dentroo do bloco, a execução desviará para os blocos catch
correspondentesA thread está sendo utilizada neste momento para a procura das informacoes do usuario para que ocorra o login.
Tratamento de exceções no login:
//Trata a exceção de usuario ou senha incorreto
catch (WebException e) {
if (e.Response != null && (e.Response as HttpWebResponse).StatusCode == HttpStatusCode.Unauthorized)
throw new AuthenticationException ("Username or password incorrect");
else
throw new LoginException ("Failed to login", e);
} catch (Exception e) {
throw new LoginException ("Failed to login", e);
}
}
// caso haja problema com a conexão com o servidor a thread irá esperar por um tempo
// determinado em (UpdateSleepInterval) e tentará novamente, caso realmente não
// consiga se conectar com o servidor a mensagem de erro é mostrada
catch (WebException) {
if (!updateRunning)
break;
// esperar por um tempo, talvez o servidor caiu
// temporariamente ou algo assim.
Thread.Sleep (UpdateSleepInterval);
} catch (Exception e) {
if (!updateRunning)
break;
Console.Error.WriteLine ("Exception in update loop: " + e);
sThread.Sleep (UpdateSleepInterval);
}
Cada bloco
try
é seguido por zero ou mais blocos catch
, onde cada bloco catch
é referente a uma única exceção.
O primeiro tratamento de exceção
catch
está sendo usado para caso o usuario informe login ou senha incorreto.
O segundo tratamento de exceção
catch
é utilizado para erros que não incluem o usuário, especificamente de conexão com o servidor, onde se não houver a conexão a execução da thread será pausada por um tempo determinado em (UpdateSleepInterval)
e tentará conexão novamente, caso realmente não consiga irá mostrar a mensagem de erro.
Escalonador

CreateUser

CheckRun

Desescalonamento

Destroy user

LogError

Mudança de título

Process job thread
