Usuário com melhor resposta
Dúvida com thread

Pergunta
-
Boas senhores,
Tenho uma aplicação windows services...desenv. em c#
Ela roda uma thread que executa 2 funções a cada 10 minutos....
controlo através de loop como fragmento abaixo...
protected override void OnStart(string[] args) { try { trdMain = new Thread(new ThreadStart(Processo)); trdMain.Start(); .... } catch (Exception ex) { // trataerro; } } private void Processo() { while (true) { //atividade 1 * // Atividade 2 * Thread.Sleep(10 * 60000); } }
Agora preciso alterar para que cada atividade rode em tempos diferentes, ou seja, atividade 1 vai rodar a cada 10 minutos e atividade 2 a cada 50 minutos...
é isso....alguém teria alguma orientação ?
obrigado e t+
Respostas
-
protected override void OnStart(string[] args) { try { trdMain = new Thread(new ThreadStart(Processo)); trdMain.Start(); .... } catch (Exception ex) { // trataerro; } } private void Processo() { int count1=0; int count2=0; while (true) { count1++; count2++; if(count1==100) { Atividade1();count1=0;} if(count2==500) {Atividade2();count2=0;} Thread.Sleep(100); } } private void Atividade1() {} private void Atividade2() {}
é um modo de se fazer... :P- Marcado como Resposta DET1 quinta-feira, 6 de setembro de 2012 13:36
-
Cara,
Tente usar o System.Threading.Timer
Timer thrdTimer = new Timer(execute, 10, 0, 1000);
void execute(object args)
{
// cast our parameter
int j = (int)args;
Console.WriteLine("passo aqui a cada " + j + "segundos");
}- Marcado como Resposta DET1 quinta-feira, 6 de setembro de 2012 13:35
-
Os parametros que voce passa no construtor são:
new Timer(nomedometodo,
argumento para o método,
passe 0 aqui,
O intervalo de tempo entre as chamadas do método);using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Foruns { class Program { static void Main(string[] args) { Timer thrdTimer = new Timer(run1,1,0,1000); Timer thrdTimer2 = new Timer(run2, 2, 0, 3000); Console.ReadLine(); } static void run1(object args) { Console.WriteLine("Executando método 1"); } static void run2(object args) { Console.WriteLine("Executando método 2"); } } }
Execute este console aplication para ver se fica mais fácil de entender...
- Marcado como Resposta DET1 quinta-feira, 6 de setembro de 2012 13:35
-
DET1,
A respeito do que comentou sobre 2 threads com loop infinito, se você precisa verificar alguma variável fora da "tela" dentro de um intervalo de tempo não vejo outra maneira de fazer.
Tudo depende de como você montou suas rotinas, se seu código está bem refatorado e otimizado, etc. Isso sim influencia na performance.
- Marcado como Resposta DET1 quinta-feira, 6 de setembro de 2012 13:35
Todas as Respostas
-
Por que simplesmente não adiciona um parâmetro no método? (ex: int intervalo).
Ou cria uma segunda thread?
- Editado MarceloSchneider terça-feira, 4 de setembro de 2012 18:02
-
protected override void OnStart(string[] args) { try { trdMain = new Thread(new ThreadStart(Processo)); trdMain.Start(); .... } catch (Exception ex) { // trataerro; } } private void Processo() { int count1=0; int count2=0; while (true) { count1++; count2++; if(count1==100) { Atividade1();count1=0;} if(count2==500) {Atividade2();count2=0;} Thread.Sleep(100); } } private void Atividade1() {} private void Atividade2() {}
é um modo de se fazer... :P- Marcado como Resposta DET1 quinta-feira, 6 de setembro de 2012 13:36
-
Obrigado pelo retorno....
Mais um detalhe, preciso que rode em paralelo...se não fosse isso, o variável de controle serviria...
Tem que ser em pararelo vou ter caso onde uma pode ultrapassar o tempo da outra na execução...terei intervalos menores...
No caso de 2 thread, como ficaria a sintaxe da chamada e o colotrole do loop ?
Seria
trdMain1 = new Thread(new ThreadStart(atividade1)); trdMain1.Start();
trdMain2 = new Thread(new ThreadStart(atividade2));
trdMain2.Start();
O loop, seria um em cada atividade? seria correto?
-
Cara,
Tente usar o System.Threading.Timer
Timer thrdTimer = new Timer(execute, 10, 0, 1000);
void execute(object args)
{
// cast our parameter
int j = (int)args;
Console.WriteLine("passo aqui a cada " + j + "segundos");
}- Marcado como Resposta DET1 quinta-feira, 6 de setembro de 2012 13:35
-
-
Senhores fiz então desta forma , como no exemplo que dei, quebrei as atividades em 2 th e o método coloquei dentro de um loop infinito...
Agora uma dúvida, isto é uma boa pratica ?
Outra coisa, vou estudar sobre o comando que o Willian informou...pra adiantar Willian, não entendi como ficar em loop ou seja executar a cada determina tempo ?
Valeu....
- Editado DET1 quarta-feira, 5 de setembro de 2012 16:20
-
Os parametros que voce passa no construtor são:
new Timer(nomedometodo,
argumento para o método,
passe 0 aqui,
O intervalo de tempo entre as chamadas do método);using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Foruns { class Program { static void Main(string[] args) { Timer thrdTimer = new Timer(run1,1,0,1000); Timer thrdTimer2 = new Timer(run2, 2, 0, 3000); Console.ReadLine(); } static void run1(object args) { Console.WriteLine("Executando método 1"); } static void run2(object args) { Console.WriteLine("Executando método 2"); } } }
Execute este console aplication para ver se fica mais fácil de entender...
- Marcado como Resposta DET1 quinta-feira, 6 de setembro de 2012 13:35
-
-
DET1,
A respeito do que comentou sobre 2 threads com loop infinito, se você precisa verificar alguma variável fora da "tela" dentro de um intervalo de tempo não vejo outra maneira de fazer.
Tudo depende de como você montou suas rotinas, se seu código está bem refatorado e otimizado, etc. Isso sim influencia na performance.
- Marcado como Resposta DET1 quinta-feira, 6 de setembro de 2012 13:35
-
é um projeto windows services, que fica fazendo validações....
São rotinas independentes, antes estava em um thread e não havia problema, mas em um momento uma delas ficou processando a mais tempo e não era erro, dai a primeira ficou atrasada...
Dai a necessidade de separar....