我在这里的第一篇文章,但这个网站已经回答了我过去的许多问题。希望我能提供足够的细节来解释我面临的问题,因为我不完全理解所有 .NET 如何处理我创建的线程!
好的,基本上,我有一个线程设置为每 1000 毫秒运行一次,它从视频编码器获取帧计数器并计算 FPS。System.Threading.Timer 现在的准确性已经足够了,尽管我意识到它并不准确(事件之间通常超过 1000 毫秒)。我还有另一个 Threading.Timer 正在运行并从网络读取数据到串行设备。问题是,如果网络设备不可用并且该计时器上的套接字超时,则 FPS 计时器将完全不同步!所以他们以前每 1015 毫秒(测量)执行一次,但是当我启动另一个 Thread.Timer 尝试建立套接字连接并且它失败时,它会导致 FPS 计数器计时器完全关闭(最多 7000 毫秒!!)。我不太清楚为什么这应该是并且真的需要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;
}
希望不要太模棱两可!