C#のタイマー
2498 ワード
タイマーは2種類あり、1つはブロック方式であり、1つは非ブロックである.
@1.1:ブロック方式のタイマー、sleepを呼び出して現在のスレッドをスリープさせ、端末は文字を入力できない
@1.2:自分の遅延関数、もちろんこのポーリングは取るべきでなくて、CPU占有率は非常に高いことができます
@1.3ネット上で見たもう一つのポーリングコードは、もちろん取るに足らない.
@2.1:非ブロック方式で、ni値を印刷する際に文字列「<------>」を印刷することができ、MFCとwin 32 SDKのWM_に似ている.TIMERメッセージ
@1.1:ブロック方式のタイマー、sleepを呼び出して現在のスレッドをスリープさせ、端末は文字を入力できない
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.Out.WriteLine("1->");
Thread.Sleep(2000);
}
}
}
@1.2:自分の遅延関数、もちろんこのポーリングは取るべきでなくて、CPU占有率は非常に高いことができます
class Program
{
[DllImport("kernel32.dll")]
static extern uint GetTickCount();
static void Main(string[] args)
{
while (true)
{
Console.Out.WriteLine("1->");
// Thread.Sleep(2000);
Delayms(2000);
}
}
// delayms
static void Delayms(uint delayms)
{
uint startms = GetTickCount();
while (GetTickCount() - startms < delayms){}
}
}
@1.3ネット上で見たもう一つのポーリングコードは、もちろん取るに足らない.
// delays
static void Delays(uint delays)
{
DateTime chaoshi = DateTime.Now.AddSeconds(delays); //
DateTime bidui = DateTime.Now; //
while (DateTime.Compare(chaoshi, bidui) == 1) // DateTime.Compare 。 。
{
bidui = DateTime.Now;
}
}
@2.1:非ブロック方式で、ni値を印刷する際に文字列「<------>」を印刷することができ、MFCとwin 32 SDKのWM_に似ている.TIMERメッセージ
class Program
{
[DllImport("kernel32.dll")]
static extern uint GetTickCount();
static void Main(string[] args)
{
System.Timers.Timer aTimer = new System.Timers.Timer();
//
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// 2000
aTimer.Interval = 2000;
aTimer.Enabled = true;
int ni=0;
while (true)
{
Console.Out.WriteLine(ni++);
Thread.Sleep(1000);
}
}
// Specify what you want to happen when the Elapsed event is raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("<--------->");
}
}