System.Timers.Timer 多线程问题[转]
生活随笔
收集整理的這篇文章主要介紹了
System.Timers.Timer 多线程问题[转]
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
已解決問(wèn)題] System.Timers.Timer 多線程 ,同時(shí)首次進(jìn) 聲明:
System.Timers.Timer?timer?=?new?System.Timers.Timer();
timer.Elapsed?+=?new?ElapsedEventHandler(timer_Elapsed);
button按鈕事件:
timer.AutoReset?=?true;
timer.Interval?=15;
timer.Start?();
timer調(diào)用的函數(shù):
void?timer_Elapsed(object?sender,?ElapsedEventArgs?e)
{
?Console.Out.WriteLine(DateTime.Now?+"?"+?DateTime.Now.Millisecond.ToString()?+?"timer?in:"?+?nCountTimer.ToString());
}
運(yùn)行結(jié)果:
運(yùn)行程序后第一次點(diǎn)擊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次進(jìn)入的時(shí)間相同?(每次嘗試都是這樣)
第二次點(diǎn)擊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
運(yùn)行正常,20ms進(jìn)入一次,但我設(shè)置的進(jìn)入間隔為15ms!
問(wèn)題補(bǔ)充:附加獨(dú)立測(cè)試代碼
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Timers;
namespace WindowsApplication3
{
static class Program
{
/// <summary>
/// 應(yīng)用程序的主入口點(diǎn)。
/// </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 );
}
}
}
運(yùn)行結(jié)果: 間隔都設(shè)置到60了 初次進(jìn)入達(dá)到了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)
System.Timers.Timer?timer?=?new?System.Timers.Timer();
timer.Elapsed?+=?new?ElapsedEventHandler(timer_Elapsed);
button按鈕事件:
timer.AutoReset?=?true;
timer.Interval?=15;
timer.Start?();
timer調(diào)用的函數(shù):
void?timer_Elapsed(object?sender,?ElapsedEventArgs?e)
{
?Console.Out.WriteLine(DateTime.Now?+"?"+?DateTime.Now.Millisecond.ToString()?+?"timer?in:"?+?nCountTimer.ToString());
}
運(yùn)行結(jié)果:
運(yùn)行程序后第一次點(diǎn)擊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次進(jìn)入的時(shí)間相同?(每次嘗試都是這樣)
第二次點(diǎn)擊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
運(yùn)行正常,20ms進(jìn)入一次,但我設(shè)置的進(jìn)入間隔為15ms!
?
再請(qǐng)教一下 如何讓timers.timer單線程執(zhí)行?lock怎么用?我加上了還是會(huì)同時(shí)多次進(jìn)入!
提問(wèn)者:wills - 初學(xué)一級(jí)問(wèn)題補(bǔ)充:附加獨(dú)立測(cè)試代碼
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Timers;
namespace WindowsApplication3
{
static class Program
{
/// <summary>
/// 應(yīng)用程序的主入口點(diǎn)。
/// </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 );
}
}
}
運(yùn)行結(jié)果: 間隔都設(shè)置到60了 初次進(jìn)入達(dá)到了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的即時(shí)機(jī)制不是很準(zhǔn)確,如果你要的精度很高的話,恐怕很難時(shí)間建議改成 輪訓(xùn)+DoEvents 另外,Timer本是內(nèi)置線程池,因此是多線程的,想要變成單線程,估計(jì)。。 使用LOCK等,鎖定一個(gè)全局變量訪問(wèn),具體可以參考MSDN。.NET 也內(nèi)置的系統(tǒng)的同步機(jī)制 5個(gè)月前?? 回答者:G yc {Son of VB.NET} - 小蝦三級(jí) 如果是在winform下使用可以使用System.Windows.Forms.Timer試試。 不過(guò)確實(shí)如G yc {Son of VB.NET} 所說(shuō),理論上不可能保證準(zhǔn)確,因?yàn)橄到y(tǒng)中運(yùn)行的不止一個(gè)進(jìn)程;如果到了時(shí)間你的程序沒(méi)有得到cpu時(shí)間,那肯定會(huì)不準(zhǔn)的。 5個(gè)月前?? 回答者:玉開(kāi) - 大俠五級(jí) 建議自己開(kāi)個(gè)線程比較穩(wěn)妥. |
總結(jié)
以上是生活随笔為你收集整理的System.Timers.Timer 多线程问题[转]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网速慢的几种原因
- 下一篇: [CTO札记]从生活来看‘服务心态’