我的应用程序中有两个线程 - 主 UI 线程和由 wm_WiiMoteChanged 事件处理程序(后台线程)启动的另一个线程。在主线程中,我做了一些视频处理。我有一个名为processFrame
如下所示的函数。我使用该代码来测量处理每一帧的时间,从而测量每秒的帧数。
如果我注释掉这wm.WiiMoteChanged ...
条线(见下文),帧速率约为 15-20 fps 并查看视频,这似乎是正确的(有一个小的延迟)。
但是当我取消注释该行时,即添加事件处理程序(它将自己产生一个线程),fps 上升到 40-50,但这绝对是错误的 - 视频实际上更加滞后。
有人可以向我解释为什么会这样吗?谢谢。
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";
}
编辑
一个有趣的发现,只有当这条线出现在 wm_WiimoteChanged 中时,才会发生这种情况。
ibxOutput.Image = new Image<Bgr, Byte>(_irViewAreaBitmap);
旁注:这条线也是更高延迟的原因 - 在设置它之前完成的处理实际上很快!