日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

System.Timers.Timer 多线程问题[转]

發布時間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 System.Timers.Timer 多线程问题[转] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
已解決問題] System.Timers.Timer 多線程 ,同時首次進 聲明:
System.Timers.Timer?timer?=?new?System.Timers.Timer();
timer.Elapsed?+=?new?ElapsedEventHandler(timer_Elapsed);

button按鈕事件:
timer.AutoReset?=?true;
timer.Interval?=15;
timer.Start?();

timer調用的函數:
void?timer_Elapsed(object?sender,?ElapsedEventArgs?e)
{
?Console.Out.WriteLine(DateTime.Now?+"?"+?DateTime.Now.Millisecond.ToString()?+?"timer?in:"?+?nCountTimer.ToString());
}

運行結果:
運行程序后第一次點擊button事件:
2008-5-8?17:38:21?170timer?in:0
2008-5-8?17:38:21?170timer?in:1
2008-5-8?17:38:21?190timer?in:2
2008-5-8?17:38:21?210timer?in:3
不解?為什么前2次進入的時間相同?(每次嘗試都是這樣)

第二次點擊button事件:
2008-5-8?17:38:23?383timer?in:0
2008-5-8?17:38:23?403timer?in:1
2008-5-8?17:38:23?423timer?in:2
2008-5-8?17:38:23?443timer?in:3
2008-5-8?17:38:23?463timer?in:4
運行正常,20ms進入一次,但我設置的進入間隔為15ms!

?

再請教一下 如何讓timers.timer單線程執行?lock怎么用?我加上了還是會同時多次進入!

提問者:wills - 初學一級
問題補充:附加獨立測試代碼

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Timers;

namespace WindowsApplication3
{
static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);

timer.AutoReset = true;
timer.Interval =60;

timer.Start();


Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
public static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Console.Out.WriteLine(DateTime.Now + " " + DateTime.Now.Millisecond + " "+DateTime .Now.TimeOfDay.TotalMilliseconds );

}

}
}

運行結果: 間隔都設置到60了 初次進入達到了3次
2008-5-9 10:08:38 155 36518155.912
2008-5-9 10:08:38 155 36518155.912
2008-5-9 10:08:38 155 36518155.912
2008-5-9 10:08:38 185 36518185.9552
2008-5-9 10:08:38 246 36518246.0416
2008-5-9 10:08:38 306 36518306.128
2008-5-9 10:08:38 366 36518366.2144
2008-5-9 10:08:38 426 36518426.3008
2008-5-9 10:08:38 486 36518486.3872
2008-5-9 10:08:38 546 36518546.4736
2008-5-9 10:08:38 606 36518606.56
2008-5-9 10:08:38 666 36518666.6464

所有回答(3)
Timer的即時機制不是很準確,如果你要的精度很高的話,恐怕很難時間建議改成 輪訓+DoEvents 另外,Timer本是內置線程池,因此是多線程的,想要變成單線程,估計。。 使用LOCK等,鎖定一個全局變量訪問,具體可以參考MSDN。.NET 也內置的系統的同步機制
5個月前?? 回答者:G yc {Son of VB.NET} - 小蝦三級 如果是在winform下使用可以使用System.Windows.Forms.Timer試試。 不過確實如G yc {Son of VB.NET} 所說,理論上不可能保證準確,因為系統中運行的不止一個進程;如果到了時間你的程序沒有得到cpu時間,那肯定會不準的。
5個月前?? 回答者:玉開 - 大俠五級 建議自己開個線程比較穩妥.

總結

以上是生活随笔為你收集整理的System.Timers.Timer 多线程问题[转]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。