|
分類:[.NET 全般]
いつもお世話になっております。
VS2005でC#を使用してます。
以下のプログラムを実行すると、CPUが100%に近い状態になってしまいます。
コメントアウトしてるThread.Sleep(1)を入れると負荷がなくなります。
メインスレッドはループ処理の中でApplication.DoEvents()
しとけばOKと思っていたのですが、何か勘違いをしているのでしょうか?
どなたか教えていただけますでしょうか。よろしくお願いいたします。
private Thread ThreadTest;
private bool fEnd = false;
private void button1_Click(object sender, EventArgs e) {
ThreadTest = new Thread(RunThread);
ThreadTest.Start();
// 処理待ちループ
while (true) {
if (fEnd) break;
Application.DoEvents();
/* ↓↓↓↓↓↓↓↓ */
//Thread.Sleep(1);
/* ↑↑↑↑↑↑↑↑ */
}
MessageBox.Show("終わり");
}
// スレッドの処理
private void RunThread() {
DateTime endTime = DateTime.Now.AddMinutes(1);
while (true) {
if (endTime < DateTime.Now) break;
Thread.Sleep(100);
}
fEnd = true;
}
|