我在這裏的第一篇文章,但這個網站已經回答了我以前有過的許多問題。希望我可以提供足夠的細節來解釋我所面臨的問題,因爲我不完全理解.NET如何處理我創建的線程!System.Threading.Timer導致其他計時器落後
好吧,所以基本上,我有一個線程設置爲每1000ms運行一次從視頻編碼器獲取幀計數器並計算FPS。儘管我意識到它不準確(通常在事件之間超過1000毫秒),但對於現在的System.Threading.Timer來說,精度足夠了。我還有另一個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;
}
Hope完全不太含糊!
爲什麼隱藏異常是一個好主意? – 2012-04-08 21:37:00
該軟件將用於會出現很多超時的環境中,並且我認爲每5秒鐘不會顯示一條消息會很有用。我在調試時發現異常,但我期望連接失敗,因爲網絡是無線網絡,並且在操作期間預計會出現退出。你會建議什麼? – jackocurly0074 2012-04-08 21:40:08
我建議捕捉'TimeoutException'或任何你關心的特定異常,並允許其他人傳播。這樣,你會了解其他例外情況。 – 2012-04-08 23:56:09