Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2014, 22:05   #1
medva1997
Новичок
Джуниор
 
Регистрация: 27.06.2014
Сообщений: 1
По умолчанию Замена таймера

Добрый день! Пишу программу для работы с несколькими потоками видео (пользуюсь AForge.NET) и столкнулся с проблемой работы таймера. На вход поступает несколько потоков: с камер, по сети, захват видео с экрана. Задача программы - выбирать источник сигнала для дальнейшей трансляции. На выходе нужно записывать в файл итоговый
поток и в отдельные файлы - каждый из исходных потоков.
Селектор работает, выходной поток пишется. Но когда пытаюсь записывать в файлы более одного потока, возникает проблема.
Сейчас использую следующий прием: есть некая функция, которая вызывается по таймеру раз в 31 мс, и она выполняет запись.
Однако в итоге в выходные файлы попадает не по 30 кадров в секунду, а меньше. есть ощущение, что таймер отрабатывает не системное прерывание по прошествию кванта времени, а реализует функцию sleep - спит указанное время. Т.е. сперва пытаются отрабатывать функции записи в файлы, на что расходуется время, затем программа спит, в результате цикл занимает не 31 мс, а больше, и кадров записывается меньше. Диспетчер задач показывает, что загрузка ЦП и диска до предельной очень далека (50% и 2% соответственно).

Можете ли порекомендовать что-нибудь для решения данной проблемы?

Для лучшего понимания сделанного привожу код

Код:
private void Form1_Load(object sender, EventArgs e)
        {           
            time = new System.Windows.Forms.Timer();
            time.Interval = 31;
            time.Enabled = true;
            time.Tick += time_Tick;
            time.Start();
        }

      private void time_Tick(object sender, EventArgs e)
      {
            for (int i = 0; i < number_of_small_panels; i++)// number_of_small_panels=6
             {
                preview[i].videowriter();// запись нового кадра файл (работает несколько Миллисекунд)

              }
          //...  другой фрагмент кода
      }           

   //другой класс
     public void videowriter()
        {
            if (Videowriter1 != null)
            {
                Videowriter1.WriteVideoFrame(Videosoursecach);
            }

        }
medva1997 вне форума Ответить с цитированием
Старый 27.06.2014, 22:43   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

винда это не риал тайм, а таймеры в шарпе и подавно
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пауза таймера qwerty74 C# (си шарп) 3 01.07.2011 20:53
Запуск таймера Alexandr000006 Помощь студентам 4 08.03.2011 16:09
Timer 3 таймера Бриит Помощь студентам 3 09.11.2010 10:21
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
Интервал Таймера... Roof Общие вопросы Delphi 27 08.07.2008 20:19