вот такой код. Не пойму, как правильно написать
задача: не начинать работу функции таймера 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();
}
}
}
}
Здравствуйте, Аноним, Вы писали:
> вот такой код. Не пойму, как правильно написать > задача: не начинать работу функции таймера 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();
> }
> }
> }
> }
>
Здравствуйте, Аноним, Вы писали:
А>вот такой код. Не пойму, как правильно написать А>задача: не начинать работу функции таймера ReceiverTimer_TimerCallback2, пока не закончится предыдущий вызов данной функции ManualResetEvent.
А общая задача какая?
Re[2]: Вопрос по ManualResetEvent
От:
Аноним
Дата:
12.12.11 12:46
Оценка:
Здравствуйте, Flem1234, Вы писали:
F>Здравствуйте, Аноним, Вы писали:
А>>вот такой код. Не пойму, как правильно написать А>>задача: не начинать работу функции таймера ReceiverTimer_TimerCallback2, пока не закончится предыдущий вызов данной функции ManualResetEvent.
F>А общая задача какая?
не начинать новый вызов функции по таймеру, если не закончена работа предыдущего вызова
Здравствуйте, Аноним, Вы писали:
> AN>здесь смотрели?
> нужен именно ивент. он в других местах используется для проверок
а что любите гланды через Ж... рвать?
События по таймеру в подобных случая, мне кажется, проще пропускать.
А где собираетесь 'обнулять' event?
Здравствуйте, Аноним, Вы писали:
А>не начинать новый вызов функции по таймеру, если не закончена работа предыдущего вызова
Как по мне, то лучше ручками очередь организовать.
Re: Вопрос по ManualResetEvent
От:
Аноним
Дата:
12.12.11 17:34
Оценка:
Здравствуйте, Аноним, Вы писали:
А>почему я не ставлю Reset, но каждый вызов таймера попадает в while?
Потому что он Manual и не сбрасывается. Посмотри хотя бы пример в мсдн