저는 직렬 통신을 위해 50ms에서 Mono를 사용하여 Linux로 폴링하는 Windows C# 응용 프로그램을 포팅합니다. 우리는 현재 ZylTimer (by ZylSoft)를 사용하여 각 간격마다 "tick"이벤트를 생성하지만이 라이브러리는 pInvoke 호출을 Windows 멀티미디어 라이브러리에 랩핑하므로 물론 사용할 수 없습니다.Mono 고해상도 타이머 (Linux)
//i.e.
timZylComms.Tick += new ZylTimer.TickEventHandler(timZylComms_Tick);
timTimeout.Tick += new ZylTimer.TickEventHandler(timTimeout_Tick);
따라서, 모노에서 사용할 수있는 대안이 있는지 묻습니다. 틱 이벤트로 "스톱워치"클래스 (고해상도로 계산)를 확장하는 것이 가장 좋은 방법일까요?
또는이 기능을 재현하기 위해 포장 할 수있는 라이브러리가 있습니까? 또는이를 달성하는 다른 방법이 있습니까?
감사합니다.
편집 : 이 함께가는 어떤 문제가 있을까 :
internal class LinuxHiResTimer{
internal event EventHandler Tick;
private System.Diagnostics.Stopwatch watch;
internal int Interval{ get; set;}
private bool enabled;
internal bool Enabled {
get{ return enabled; }
set {
if (value) {
watch.Start();
Task.Run (tickGenerator);
enabled = value;
} else {
enabled = value;
}
}
}
private async Task tickGenerator(){
while (enabled){
if (watch.ElapsedMilliseconds > Interval) {
watch.Reset();
if (Tick != null)
Tick (this, new EventArgs());
} else {
float fWaitPeriod = (float)(0.8 * (Interval - watch.ElapsedMilliseconds));
if (fWaitPeriod>20)
await Task.Delay(TimeSpan.FromMilliseconds(fWaitPeriod));
}
}
watch.Stop();
}
internal LinuxHiResTimer(){
watch = new Stopwatch();
}
~LinuxHiResTimer(){
watch.Stop();
}
}
아마도 POSIX를 위해 clock_gettime 포장하는 방법이()이를 위해? – drone
Use System.Diagnostics.Stopwatch http://stackwatch.com/questions/7736013/cross-platform-high-resolution-tick-counter-on-mono –
@ rytis-i Stopwatch에는 tick() 메서드가 없습니다. 가장 좋은 방법은 Tick 이벤트로 "Stopwatch"클래스 (고해상도로 계산)를 확장하는 것입니까? – drone