Вопрос по ManualResetEvent
От: Аноним  
Дата: 12.12.11 10:42
Оценка:
вот такой код. Не пойму, как правильно написать
задача: не начинать работу функции таймера ReceiverTimer_TimerCallback2, пока не закончится предыдущий вызов данной функции ManualResetEvent.
На интервалы таймера время не обращайте — ставил для тестирования.

и еще вопрос: почему я не ставлю Reset, но каждый вызов таймера попадает в while?


  class Program
    {
        static void Main(string[] args)
        {
            Test t = new Test();
            t.TestManualEvent();     

            Console.ReadKey();
        }

        class Test
        {   
            ManualResetEvent manualEvent = new ManualResetEvent(true);
       
            internal void TestManualEvent()
            {               
                var myTimer2 = new Timer(new TimerCallback(ReceiverTimer_TimerCallback2), null, 0, 2000);
            }

            internal void ReceiverTimer_TimerCallback2(object state)
            {                
                while (manualEvent.WaitOne(500))
                {                    
                    Thread.Sleep(2000);
                    manualEvent.Set();                 
                }
            }         
        }
    }
Re: Вопрос по ManualResetEvent
От: AlexNek  
Дата: 12.12.11 11:48
Оценка:
Здравствуйте, Аноним, Вы писали:

> вот такой код. Не пойму, как правильно написать

> задача: не начинать работу функции таймера ReceiverTimer_TimerCallback2, пока не закончится предыдущий вызов данной функции ManualResetEvent.
> На интервалы таймера время не обращайте — ставил для тестирования.

> и еще вопрос: почему я не ставлю Reset, но каждый вызов таймера попадает в while?


>
>   class Program
>     {
>         static void Main(string[] args)
>         {
>             Test t = new Test();
>             t.TestManualEvent();

>             Console.ReadKey();
>         }

>         class Test
>         {
>             ManualResetEvent manualEvent = new ManualResetEvent(true);

>             internal void TestManualEvent()
>             {
>                 var myTimer2 = new Timer(new TimerCallback(ReceiverTimer_TimerCallback2), null, 0, 2000);
>             }

>             internal void ReceiverTimer_TimerCallback2(object state)
>             {
>                 while (manualEvent.WaitOne(500))
>                 {
>                     Thread.Sleep(2000);
>                     manualEvent.Set();
>                 }
>             }
>         }
>     }
>


здесь смотрели?
avalon 1.0rc3 rev 419, zlib 1.2.3
Re: Вопрос по ManualResetEvent
От: Flem1234  
Дата: 12.12.11 11:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>вот такой код. Не пойму, как правильно написать

А>задача: не начинать работу функции таймера ReceiverTimer_TimerCallback2, пока не закончится предыдущий вызов данной функции ManualResetEvent.

А общая задача какая?
Re[2]: Вопрос по ManualResetEvent
От: Аноним  
Дата: 12.12.11 12:46
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


А>>вот такой код. Не пойму, как правильно написать

А>>задача: не начинать работу функции таймера ReceiverTimer_TimerCallback2, пока не закончится предыдущий вызов данной функции ManualResetEvent.

F>А общая задача какая?


не начинать новый вызов функции по таймеру, если не закончена работа предыдущего вызова
Re[2]: Вопрос по ManualResetEvent
От: Аноним  
Дата: 12.12.11 12:54
Оценка:
Здравствуйте, AlexNek, Вы писали:


AN>здесь смотрели?


нужен именно ивент. он в других местах используется для проверок
Re[3]: Вопрос по ManualResetEvent
От: AlexNek  
Дата: 12.12.11 14:28
Оценка:
Здравствуйте, Аноним, Вы писали:

> AN>здесь смотрели?


> нужен именно ивент. он в других местах используется для проверок

а что любите гланды через Ж... рвать?
События по таймеру в подобных случая, мне кажется, проще пропускать.
А где собираетесь 'обнулять' event?
avalon 1.0rc3 rev 419, zlib 1.2.3
Re[3]: Вопрос по ManualResetEvent
От: Flem1234  
Дата: 12.12.11 15:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>не начинать новый вызов функции по таймеру, если не закончена работа предыдущего вызова


Как по мне, то лучше ручками очередь организовать.
Re: Вопрос по ManualResetEvent
От: Аноним  
Дата: 12.12.11 17:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>почему я не ставлю Reset, но каждый вызов таймера попадает в while?

Потому что он Manual и не сбрасывается. Посмотри хотя бы пример в мсдн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.