내 응용 프로그램에는 메인 UI 스레드와 wm_WiiMoteChanged 이벤트 처리기 (백그라운드 스레드)가 시작한 다른 스레드가 있습니다. 메인 스레드에서 나는 비디오 처리를한다. 아래에 표시된 processFrame
이라는 기능이 있습니다. 이 코드를 사용하여 각 프레임을 처리 할 시간을 측정하고 초당 프레임 수를 측정합니다.Timing a method and threads in .NET
wm.WiiMoteChanged ...
라인을 주석 처리하면 (아래 참조) 프레임 속도는 약 15-20fps이며 동영상을 보면 이것이 올바르게 보입니다 (작은 지연이 있음).
그러나 줄의 주석을 제거 할 때 (즉, 스레드 자체를 생성하는 이벤트 처리기를 추가하는 경우) 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);
(!) 참고 :이 라인이 너무 높은 지연의 원인 -이 빠른 실제로 설정하기 전에 완료 처리!
* 'wm.WiiMoteChanged' ... *를 주석 처리하면됩니다.* * 주석을 달지 않고 주석 처리를하지 않기 때문에 * 같은 소리가나요? ??? – IAbstract
'wm_WiimoteChanged' 메소드의 코드를 붙여 넣을 수 있습니까? – IAbstract
@ dboarman : 하하, "댓글을 달아주세요"를 고쳤습니다. 감사합니다 – Aishwar