У меня есть два потока в моем приложении - основной поток пользовательского интерфейса и другой поток, инициированный обработчиком события wm_WiiMoteChanged (фоновый поток). В основной теме я делаю некоторые видео обработки. У меня есть функция с именем processFrame
, показанная ниже. Я использую этот код для измерения времени обработки каждого кадра и, следовательно, частоты кадров в секунду.
Если я закомментирую строку wm.WiiMoteChanged ...
(см. Ниже), частота кадров составляет около 15-20 кадров в секунду, и, глядя на видео, это кажется правильным (с небольшим лагом).
Но когда я раскомментирую строку, то есть добавляю обработчик событий (который сам по себе создаст поток), fps поднимается до 40-50, но это определенно неправильно - видео на самом деле более медленное. 1007 *
Может кто-нибудь объяснить мне, почему это происходит? Спасибо.
private void Main_Load(object sender, EventArgs e)
{
try
{
wm.Connect();
//wm.WiimoteChanged += wm_WiimoteChanged;
wm.SetReportType(InputReport.IRAccel, true);
wm.SetLEDs(false, false, false, true);
}
catch (Exception x)
{
MessageBox.Show("Exception: " + x.Message);
this.Close();
}
}
Дополнительный код:
private void processFrame(object sender, EventArgs e)
{
DateTime curr = DateTime.Now;
performOperation();
TimeSpan currTime = DateTime.Now - curr;
lblFPS.Text = (1000 / currTime.Milliseconds).ToString() + " fps";
}
EDIT
Интересная находка, только когда эта строка присутствует в wm_WiimoteChanged, это происходит.
ibxOutput.Image = new Image<Bgr, Byte>(_irViewAreaBitmap);
Sidenote: эта строка также является причиной более высокой задержки - обработка, выполняемая перед установкой, действительно быстрая!