Jump to content

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


kelsch.cristiano
 Share

Recommended Posts

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.

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

É 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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Boas...

Sobre a DLL em C#, uma pequena brincadeira: http://tinyurl.com/28rzyxg  😄   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.

Link to comment
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
 Share

×
×
  • Create New...

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.