Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

kelsch.cristiano

Como fazer uma interrupção no programa de 0,1 Segundo

Recommended Posts

kelsch.cristiano

Preciso fazer uma interrupção no meu programa de 0,1 segundo mas não quero utilizar thred.sleep(10);

hoje meu código é esse, mas acho que ocupa mta memória.

private void LogicaDoPrograma(object state)
        {
            while (ficarEmLoop)
            {
                if (File.Exists(arquivo))               
                    //Minha Lógica
                else
                 Thread.Sleep(50);     
            }            
        }

não queria mais utilizar o while, tem como?

esse meu programa tem que ter um loop infinito só que sem while eu qro.

se não der queria saber como fazer a interrupção.

Abraço.


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
Ziwdon

Boas kelsch.cristiano,

Antes de mais dá uma olhadela neste TÓPICO.

Quanto à tua questão...não percebi muito bem o que pretendes.

- Queres fazer uma interrupção mas não queres usar Thread.Sleep. Alguma razão porque não queiras usar Thread.Sleep?

- Queres ter um loop sem While. Alguma razão porque não queiras usar While para o loop?

Cumps


"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Share this post


Link to post
Share on other sites
kelsch.cristiano

É que assim, não quero utilizar while para não deixar pesado meu programa queria utilizar tudo com IF

esse é meu código hoje,

        string arquivo = "C:\\Temp\\RequisicaoEcf.txt";
        
        public Form1()
        {
            InitializeComponent();
            b_Stop.Enabled = false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            lbl_Executando.Visible = false;
            lbl_Parado.Visible = true;
            b_Play.Enabled = true;
            b_Stop.Enabled = false;
            ficarEmLoop = false;
           
        }

        private void b_Play_Click(object sender, EventArgs e)
        {
            ficarEmLoop = true;               //Seta o Loop no programa
            lbl_Executando.Visible = true;
            lbl_Parado.Visible = false;
            b_Play.Enabled = false;
            b_Stop.Enabled = true;
            ThreadPool.QueueUserWorkItem(LogicaDoPrograma);            
        }

        private void b_Stop_Click(object sender, EventArgs e)
        {
            ficarEmLoop = false;              // Para o loop no programa
            lbl_Executando.Visible = false;
            lbl_Parado.Visible = true;
            b_Play.Enabled = true;
            b_Stop.Enabled = false;
            MessageBox.Show("'Ds Monitor' foi interrompido pelo usuário.");
        }

        private void LogicaDoPrograma(object state)
        {
            while (ficarEmLoop)
            {
                if (File.Exists(arquivo))               
                    //ImpressoraBematech.Daruma32.Daruma_FI_LeituraX();
                    MessageBox.Show("Encontrou Arquivo");
                else
                 Thread.Sleep(50);
                
                
            }            
        }

coloca um exemplo de como utilizar a interrupção em vez do  thread.sleep(50);

Abraço


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
kelsch.cristiano

ok, mais como funciona o autoreset, não conheço esse evento.

Vlw


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
kelsch.cristiano

não entendi o exemplo do link tem como me dar uma mão?


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
DVD

Pah threading é algo complicado de explicar no meu ver é dos ramos mais complicados da programação sugiro-te uma vista de olhos pelo livro Java concurrency in practice e CLR via C# tem lá coisas para iniciados e graudos sobre a matéria.

Agora que vi o teu exemplo o que precisas e um background worker mais nada lool, e teres isso em while não fica mais pesado se é isso que realmente queres fazer.

Senão ficares satisfeito com a resposta peço-te que sejas mais explicito no que queres.

Cumpz

Share this post


Link to post
Share on other sites
RA

Boas...

O DVD tem razão. Threading é lixado. Se tiveres paciência e curiosidade podes dar uma olhadela a este link: http://www.albahari.com/threading/. Aborda bastantes coisas sobre threading, entre elas: O ThreadPool, o BackgroundWorkder, a cena dos locks, o tal AutoResetEvent e outros tópicos que já foram mencionados. Tem até uma versão PDF aqui.

Quanto à implementação com o while, mais uma vez concordo com o DVD. Já qto à escolha do BackgroundWorker sobre a ThreadPool, acho que o efeito é o mesmo.

Sobre a interpretação do que pedes, também não compreendi bem quando dizes, por exemplo:

"não quero utilizar while para não deixar pesado meu programa queria utilizar tudo com IF".

Tenta elaborar melhor a tua ideia. Talvez se colocares um exemplo em pseudocódigo (ou alguma aproximação a isso que se entenda bem) te consigas expressar melhor.

Cmpts.


"Some men see things as they are and say why - I dream things that never were and say why not." - George Bernard Shaw

Share this post


Link to post
Share on other sites
kelsch.cristiano

Bom, no primeiro momento vou deixar com while até mesmo pq isso que eu qro é mais pra ver se aprendo um pouco alguma coisa meio diferente, mas isso vai com tempo para aprender,

Uma coisa que queria era criar uma DLL no C# tem como neh?

Abraço


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
RA

Boas...

Sobre a DLL em C#, uma pequena brincadeira: http://tinyurl.com/28rzyxg  :D   Hehehe! Adoro esse site:)

Agora a sério. Isso é muito simples. Para criar a DLL fazes: File - New - Project. Depois escolhes a opção "Class Library". A única diferença que vais encontrar entre esse projecto e um projecto "Console Application" é que a Class Library não tem o método "main". Aí tens que criar as tuas classes, compilas e depois só tens adicionar ao teu projecto principal. Para adicionares ao teu projecto principal (e isto é apenas um exemplo de como o fazer) vais a "Project - Add Reference". Depois escolhes a tab Browse na janela que aparece e vais buscar a DLL que criaste no outro projecto.

Depois disso podes usar na boa as classes que criaste na tua DLL. Basta que conheças o "fully qualified name" (Ou seja, o nome completo em conjunto com o namespace) das classes que criaste nessa mesma DLL.

Só uma nota. Esta questão já foge um pouco ao título que criaste. Se calhar devias ter aberto um novo tópico aqui no fórum.

Cheers.


"Some men see things as they are and say why - I dream things that never were and say why not." - George Bernard Shaw

Share this post


Link to post
Share on other sites
kelsch.cristiano

Vlw pelas dicas, sou meio novo nesse mundo de C#, quando mudar de assunto criarei um novo tópico,

abraços


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
kelsch.cristiano

PEssoal pq quando eu entro nas duvidas meu usuario está perdendo o logoff?

não consigo postar nenhum tópico novo, estou precisando tirar uma duvida e qro criar um novo.

abraço


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
kelsch.cristiano

criei um novo tópico mais não aparece na lista. pq?


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.