gpt4 book ai didi

c# - System.Threading.Timer导致其他计时器落后

转载 作者:行者123 更新时间:2023-12-03 12:01:13 24 4
gpt4 key购买 nike

我在这里的第一篇文章,但是该站点已经回答了我过去遇到的许多问题。希望我能提供足够的细节来解释我所面临的问题,因为我不完全了解所有.NET如何处理我创建的线程!

好的,所以基本上,我将线程设置为每1000ms运行一次,该线程从视频编码器获取帧计数器并计算FPS。到目前为止,使用System.Threading.Timer的准确性已经足够了,尽管我意识到它是不准确的(事件之间通常超过1000ms)。我还有另一个正在运行的Threading.Timer,它正在从网络读取数据到串行设备。问题是,如果网络设备不可用,并且该计时器上的套接字超时,则FPS计时器将完全不同步!因此,它们以前每1015ms(执行一次)执行一次,但是当我启动另一个Thread.Timer尝试建立套接字连接时,它失败了,这将导致FPS计数器计时器完全关闭(最多7000ms!)。不太确定为什么会这样,实际上无论如何都需要FPS计数器每秒运行一次。

一点代码->

FPS柜台

private void getFPS(Object stateInfo)//Run once per second
{
int frames = AxisMediaControl.getFrames; //Axis Encoder media control
int fps = frames - prevValue;
prevValue = frames;
setFPSBar(fps, fps_color); //Delegate to update progress bar for FPS
}

电池电量计时器
while (isRunning)
{
if (!comm.Connected) //comm is standard socket client
comm.Connect(this.ip_address, this.port); //Timeout here causes other timer threads to go out of sync

if (comm.Connected)
{
decimal reading = comm.getBatt_Level();
//Calculate Readings and update GUI
Console.Out.WriteLine("Reading = " + (int)prog);
break;//Debug

}

这是当前用于连接到套接字的代码->
 public Socket mSocket { get; set; }
public bool Connect(IPAddress ip_address, UInt16 port)
{
try
{
mSocket.Connect(ip_address, port);
}
catch(Exception ex)
{

}
return mSocket.Connected;
}

希望不要太模棱两可!

最佳答案

虽然我不知道为什么FPS计时器不被调用7s,但我可以建议一种解决方法:通过记住Environment.TickCount值,测量自上次更新FPS值以来的TimeSpan。然后,将FPS值计算为(delta_frames/delta_t)。

关于c# - System.Threading.Timer导致其他计时器落后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com