DoboWiki
Top
> .NETプログラミング研究/19 をテンプレートにして作成
.NETプログラミング研究/19 をテンプレートにして作成
開始行:
#title(.NETプログラミング研究 第19号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第19号 [#cf44b7e3]
**.NET Tips [#c7c45960]
**.NETのマルチスレッドプログラミング [#j9e7c849]
#column(注意){{
この記事の最新版は「[[.NETのマルチスレッドプログラミング>...
}}
.NETのマルチスレッドプログラミングについて、今号から数回...
***新しいスレッドを作成し、実行する [#bcc92602]
まずは、マルチスレッドプログラミングのはじめの一歩である...
マルチスレッドを使用することにより、より効率的なアプリケ...
(スレッドとは何か、マルチスレッドの利点と欠点などに関し...
-[[スレッドおよびスレッド処理>http://www.microsoft.com/ja...
-[[マルチスレッド アプリケーション>http://www.microsoft.c...
マルチスレッドはうまく使えば非常に便利ですが、マルチスレ...
.NET FrameworkのSystem.Threading名前空間にはマルチスレッ...
まずは、マルチスレッドを用いない次のようなコンソールアプ...
#code(vbnet){{
Class MainClass
Public Shared Sub Main()
Console.WriteLine("スタート")
'SpendLongTimeメソッドを実行
SpendLongTime()
Console.WriteLine("待機中...")
Console.ReadLine()
End Sub
Private Shared Sub SpendLongTime()
'長い時間のかかる処理があるものとする
System.Threading.Thread.Sleep(10000)
'処理が終わったことを知らせる
Console.WriteLine("終わりました")
End Sub
End Class
}}
#code(csharp){{
class MainClass
{
public static void Main()
{
Console.WriteLine("スタート");
//SpendLongTimeメソッドを実行
SpendLongTime();
Console.WriteLine("待機中...");
Console.ReadLine();
}
private static void SpendLongTime()
{
//長い時間のかかる処理があるものとする
System.Threading.Thread.Sleep(10000);
//処理が終わったことを知らせる
Console.WriteLine("終わりました");
}
}
}}
このアプリはまず「スタート」と出力した後、SpendLongTimeメ...
さて、いよいよマルチスレッドの例として、上記コードのSpend...
#code(vbnet){{
Class MainClass
Public Shared Sub Main()
Console.WriteLine("スタート")
'SpendLongTimeメソッドを実行するための
'Threadオブジェクトを作成する
Dim t As New System.Threading.Thread( _
New System.Threading.ThreadStart( _
AddressOf SpendLongTime))
'スレッドを開始する
t.Start()
Console.WriteLine("待機中...")
Console.ReadLine()
End Sub
'別スレッドで実行するメソッド
Private Shared Sub SpendLongTime()
'長い時間のかかる処理があるものとする
System.Threading.Thread.Sleep(10000)
'処理が終わったことを知らせる
Console.WriteLine("終わりました")
End Sub
End Class
}}
#code(csharp){{
class MainClass
{
public static void Main()
{
Console.WriteLine("スタート");
//SpendLongTimeメソッドを実行するための
//Threadオブジェクトを作成する
System.Threading.Thread t =
new System.Threading.Thread(
new System.Threading.ThreadStart(SpendLongTim...
//スレッドを開始する
t.Start();
Console.WriteLine("待機中...");
Console.ReadLine();
}
//別スレッドで実行するメソッド
private static void SpendLongTime()
{
//長い時間のかかる処理があるものとする
System.Threading.Thread.Sleep(10000);
//処理が終わったことを知らせる
Console.WriteLine("終わりました");
}
}
}}
このアプリを実行すると、まず「スタート」と出力され、その...
***フォアグラウンドスレッドとバックグラウンドスレッドの違...
スレッドには、フォアグラウンドスレッドとバックグランドス...
Threadオブジェクトが新しく作成、起動されたとき、そのスレ...
スレッドをフォアグラウンドスレッドまたはバックグラウンド...
具体的な例を見てみましょう。まずはフォアグラウンドスレッ...
#code(vbnet){{
'Imports System.Threading
'が宣言されているものとする
Class MainClass
'エントリポイント
Public Shared Sub Main()
'スレッドを作成し、開始する
Dim t1 As New Thread(New ThreadStart(AddressOf My...
'フォアグラウンドスレッドとする(デフォルト)
t1.IsBackground = False
t1.Start()
'エンターキーが押されるまで待機する
Console.ReadLine()
Console.WriteLine("メインスレッド終了")
End Sub
Public Shared Sub MyMethod1()
Console.WriteLine("スレッド開始")
'10秒待機する
Thread.Sleep(10000)
Console.WriteLine("スレッド終了")
End Sub
End Class
}}
#code(csharp){{
//using System.Threading;
//が宣言されているものとする
class MainClass
{
//エントリポイント
public static void Main()
{
//スレッドを作成し、開始する
Thread t1 = new Thread(new ThreadStart(MyMethod1));
//フォアグラウンドスレッドとする(デフォルト)
t1.IsBackground = false;
t1.Start();
//エンターキーが押されるまで待機する
Console.ReadLine();
Console.WriteLine("メインスレッド終了");
}
public static void MyMethod1()
{
Console.WriteLine("スレッド開始");
//10秒待機する
Thread.Sleep(10000);
Console.WriteLine("スレッド終了");
}
}
}}
次はバックグラウンドスレッドの例です。作成したスレッドが...
#code(vbnet){{
'Imports System.Threading
'が宣言されているものとする
Class MainClass
'エントリポイント
Public Shared Sub Main()
'スレッドを作成し、開始する
Dim t1 As New Thread(New ThreadStart(AddressOf My...
'バックグラウンドスレッドとする
t1.IsBackground = True
t1.Start()
'エンターキーが押されるまで待機する
Console.ReadLine()
Console.WriteLine("メインスレッド終了")
End Sub
Public Shared Sub MyMethod1()
Console.WriteLine("スレッド開始")
'10秒待機する
Thread.Sleep(10000)
Console.WriteLine("スレッド終了")
End Sub
End Class
}}
#code(csharp){{
//using System.Threading;
//が宣言されているものとする
class MainClass
{
//エントリポイント
public static void Main()
{
//スレッドを作成し、開始する
Thread t1 = new Thread(new ThreadStart(MyMethod1));
//バックグラウンドスレッドとする
t1.IsBackground = false;
t1.Start();
//エンターキーが押されるまで待機する
Console.ReadLine();
Console.WriteLine("メインスレッド終了");
}
public static void MyMethod1()
{
Console.WriteLine("スレッド開始");
//10秒待機する
Thread.Sleep(10000);
Console.WriteLine("スレッド終了");
}
}
}}
***スレッドに優先順位をつける [#te74f802]
スレッドの優先順位はThread.Priorityプロパティによって変更...
この優先順位というのは、OSによるスレッドのスケジューリン...
-[[スレッドのスケジューリング>http://www.microsoft.com/ja...
このスレッドの優先順位を利用することにより、例えば、長く...
優先順位の違いにより、スレッドがどのように実行されるか具...
#code(vbnet){{
'Imports System.Threading
'が宣言されているものとする
'エントリポイント
Public Shared Sub Main()
'2つのThreadオブジェクトを作成する
Dim t1 As New Thread(New ThreadStart(AddressOf MyThre...
t1.Name = "1"
Dim t2 As New Thread(New ThreadStart(AddressOf MyThre...
t2.Name = "2"
'1つのスレッドを開始
t1.Start()
'しばらく待機の後2つ目のスレッドを開始
Dim i As Integer
For i = 0 To 99
Console.Write("")
Next i
t2.Start()
'2つのスレッドが終了するまで待つ
t1.Join()
t2.Join()
End Sub
Private Shared Sub MyThread()
Dim i As Integer
For i = 0 To 199
'スレッド名を出力する
Console.Write(Thread.CurrentThread.Name)
Next i
End Sub
}}
#code(csharp){{
//using System.Threading;
//が宣言されているものとする
//エントリポイント
public static void Main()
{
//2つのThreadオブジェクトを作成する
Thread t1 = new Thread(new ThreadStart(MyThread));
t1.Name = "1";
Thread t2 = new Thread(new ThreadStart(MyThread));
t2.Name = "2";
//1つのスレッドを開始
t1.Start();
//しばらく待機の後2つ目のスレッドを開始
for (int i = 0; i < 100; i++)
Console.Write("");
t2.Start();
//2つのスレッドが終了するまで待つ
t1.Join();
t2.Join();
}
private static void MyThread()
{
for (int i = 0; i < 200; i++)
{
//スレッド名を出力する
Console.Write(Thread.CurrentThread.Name);
}
}
}}
結果は例えば次のようになります(スレッド1が"1"を、スレッ...
#pre{{
111111111111111111111111111111111111111111111111111111111...
111111111111222222222222222222222222222222222222222222222...
222222222222222222222222222222222222222222222222222222222...
222222222222222222222222222222222222222222222222222222222...
111111111111111111111111111111111111111111111111111111111...
1111111111111111111111111111111111111111111111122222222
}}
次に、2番目に実行するスレッドに最高の優先順位であるHighes...
#code(vbnet){{
'Imports System.Threading
'が宣言されているものとする
'エントリポイント
Public Shared Sub Main()
'2つのThreadオブジェクトを作成する
Dim t1 As New Thread(New ThreadStart(AddressOf MyThre...
t1.Name = "1"
Dim t2 As New Thread(New ThreadStart(AddressOf MyThre...
t2.Name = "2"
'2つ目のスレッドの優先順位を最高にする
t2.Priority = ThreadPriority.Highest
'1つのスレッドを開始
t1.Start()
'しばらく待機の後2つ目のスレッドを開始
Dim i As Integer
For i = 0 To 99
Console.Write("")
Next i
t2.Start()
'2つのスレッドが終了するまで待つ
t1.Join()
t2.Join()
End Sub
Private Shared Sub MyThread()
Dim i As Integer
For i = 0 To 199
'スレッド名を出力する
Console.Write(Thread.CurrentThread.Name)
Next i
End Sub
}}
#code(csharp){{
//using System.Threading;
//が宣言されているものとする
//エントリポイント
public static void Main()
{
//2つのThreadオブジェクトを作成する
Thread t1 = new Thread(new ThreadStart(MyThread));
t1.Name = "1";
Thread t2 = new Thread(new ThreadStart(MyThread));
t2.Name = "2";
//2つ目のスレッドの優先順位を最高にする
t2.Priority = ThreadPriority.Highest;
//1つのスレッドを開始
t1.Start();
//しばらく待機の後2つ目のスレッドを開始
for (int i = 0; i < 100; i++)
Console.Write("");
t2.Start();
//2つのスレッドが終了するまで待つ
t1.Join();
t2.Join();
}
private static void MyThread()
{
for (int i = 0; i < 200; i++)
{
//スレッド名を出力する
Console.Write(Thread.CurrentThread.Name);
}
}
}}
結果は例えば次のようになります。
#pre{{
111111111111111111111111111111111111111111111111111111111...
222222222222222222222222222222222222222222222222222222222...
222222222222222222222222222222222222222222222222222222222...
222222222222222222222222222222222222222222222222222222222...
111111111111111111111111111111111111111111111111111111111...
1111111111111111111111111111111111111111111111111111111
}}
はじめに優先順位がNormalのスレッド"1"が開始されますが、よ...
**コメント [#ga676940]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2003-10-21 (火) 06:00:00,DOB...
終了行:
#title(.NETプログラミング研究 第19号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第19号 [#cf44b7e3]
**.NET Tips [#c7c45960]
**.NETのマルチスレッドプログラミング [#j9e7c849]
#column(注意){{
この記事の最新版は「[[.NETのマルチスレッドプログラミング>...
}}
.NETのマルチスレッドプログラミングについて、今号から数回...
***新しいスレッドを作成し、実行する [#bcc92602]
まずは、マルチスレッドプログラミングのはじめの一歩である...
マルチスレッドを使用することにより、より効率的なアプリケ...
(スレッドとは何か、マルチスレッドの利点と欠点などに関し...
-[[スレッドおよびスレッド処理>http://www.microsoft.com/ja...
-[[マルチスレッド アプリケーション>http://www.microsoft.c...
マルチスレッドはうまく使えば非常に便利ですが、マルチスレ...
.NET FrameworkのSystem.Threading名前空間にはマルチスレッ...
まずは、マルチスレッドを用いない次のようなコンソールアプ...
#code(vbnet){{
Class MainClass
Public Shared Sub Main()
Console.WriteLine("スタート")
'SpendLongTimeメソッドを実行
SpendLongTime()
Console.WriteLine("待機中...")
Console.ReadLine()
End Sub
Private Shared Sub SpendLongTime()
'長い時間のかかる処理があるものとする
System.Threading.Thread.Sleep(10000)
'処理が終わったことを知らせる
Console.WriteLine("終わりました")
End Sub
End Class
}}
#code(csharp){{
class MainClass
{
public static void Main()
{
Console.WriteLine("スタート");
//SpendLongTimeメソッドを実行
SpendLongTime();
Console.WriteLine("待機中...");
Console.ReadLine();
}
private static void SpendLongTime()
{
//長い時間のかかる処理があるものとする
System.Threading.Thread.Sleep(10000);
//処理が終わったことを知らせる
Console.WriteLine("終わりました");
}
}
}}
このアプリはまず「スタート」と出力した後、SpendLongTimeメ...
さて、いよいよマルチスレッドの例として、上記コードのSpend...
#code(vbnet){{
Class MainClass
Public Shared Sub Main()
Console.WriteLine("スタート")
'SpendLongTimeメソッドを実行するための
'Threadオブジェクトを作成する
Dim t As New System.Threading.Thread( _
New System.Threading.ThreadStart( _
AddressOf SpendLongTime))
'スレッドを開始する
t.Start()
Console.WriteLine("待機中...")
Console.ReadLine()
End Sub
'別スレッドで実行するメソッド
Private Shared Sub SpendLongTime()
'長い時間のかかる処理があるものとする
System.Threading.Thread.Sleep(10000)
'処理が終わったことを知らせる
Console.WriteLine("終わりました")
End Sub
End Class
}}
#code(csharp){{
class MainClass
{
public static void Main()
{
Console.WriteLine("スタート");
//SpendLongTimeメソッドを実行するための
//Threadオブジェクトを作成する
System.Threading.Thread t =
new System.Threading.Thread(
new System.Threading.ThreadStart(SpendLongTim...
//スレッドを開始する
t.Start();
Console.WriteLine("待機中...");
Console.ReadLine();
}
//別スレッドで実行するメソッド
private static void SpendLongTime()
{
//長い時間のかかる処理があるものとする
System.Threading.Thread.Sleep(10000);
//処理が終わったことを知らせる
Console.WriteLine("終わりました");
}
}
}}
このアプリを実行すると、まず「スタート」と出力され、その...
***フォアグラウンドスレッドとバックグラウンドスレッドの違...
スレッドには、フォアグラウンドスレッドとバックグランドス...
Threadオブジェクトが新しく作成、起動されたとき、そのスレ...
スレッドをフォアグラウンドスレッドまたはバックグラウンド...
具体的な例を見てみましょう。まずはフォアグラウンドスレッ...
#code(vbnet){{
'Imports System.Threading
'が宣言されているものとする
Class MainClass
'エントリポイント
Public Shared Sub Main()
'スレッドを作成し、開始する
Dim t1 As New Thread(New ThreadStart(AddressOf My...
'フォアグラウンドスレッドとする(デフォルト)
t1.IsBackground = False
t1.Start()
'エンターキーが押されるまで待機する
Console.ReadLine()
Console.WriteLine("メインスレッド終了")
End Sub
Public Shared Sub MyMethod1()
Console.WriteLine("スレッド開始")
'10秒待機する
Thread.Sleep(10000)
Console.WriteLine("スレッド終了")
End Sub
End Class
}}
#code(csharp){{
//using System.Threading;
//が宣言されているものとする
class MainClass
{
//エントリポイント
public static void Main()
{
//スレッドを作成し、開始する
Thread t1 = new Thread(new ThreadStart(MyMethod1));
//フォアグラウンドスレッドとする(デフォルト)
t1.IsBackground = false;
t1.Start();
//エンターキーが押されるまで待機する
Console.ReadLine();
Console.WriteLine("メインスレッド終了");
}
public static void MyMethod1()
{
Console.WriteLine("スレッド開始");
//10秒待機する
Thread.Sleep(10000);
Console.WriteLine("スレッド終了");
}
}
}}
次はバックグラウンドスレッドの例です。作成したスレッドが...
#code(vbnet){{
'Imports System.Threading
'が宣言されているものとする
Class MainClass
'エントリポイント
Public Shared Sub Main()
'スレッドを作成し、開始する
Dim t1 As New Thread(New ThreadStart(AddressOf My...
'バックグラウンドスレッドとする
t1.IsBackground = True
t1.Start()
'エンターキーが押されるまで待機する
Console.ReadLine()
Console.WriteLine("メインスレッド終了")
End Sub
Public Shared Sub MyMethod1()
Console.WriteLine("スレッド開始")
'10秒待機する
Thread.Sleep(10000)
Console.WriteLine("スレッド終了")
End Sub
End Class
}}
#code(csharp){{
//using System.Threading;
//が宣言されているものとする
class MainClass
{
//エントリポイント
public static void Main()
{
//スレッドを作成し、開始する
Thread t1 = new Thread(new ThreadStart(MyMethod1));
//バックグラウンドスレッドとする
t1.IsBackground = false;
t1.Start();
//エンターキーが押されるまで待機する
Console.ReadLine();
Console.WriteLine("メインスレッド終了");
}
public static void MyMethod1()
{
Console.WriteLine("スレッド開始");
//10秒待機する
Thread.Sleep(10000);
Console.WriteLine("スレッド終了");
}
}
}}
***スレッドに優先順位をつける [#te74f802]
スレッドの優先順位はThread.Priorityプロパティによって変更...
この優先順位というのは、OSによるスレッドのスケジューリン...
-[[スレッドのスケジューリング>http://www.microsoft.com/ja...
このスレッドの優先順位を利用することにより、例えば、長く...
優先順位の違いにより、スレッドがどのように実行されるか具...
#code(vbnet){{
'Imports System.Threading
'が宣言されているものとする
'エントリポイント
Public Shared Sub Main()
'2つのThreadオブジェクトを作成する
Dim t1 As New Thread(New ThreadStart(AddressOf MyThre...
t1.Name = "1"
Dim t2 As New Thread(New ThreadStart(AddressOf MyThre...
t2.Name = "2"
'1つのスレッドを開始
t1.Start()
'しばらく待機の後2つ目のスレッドを開始
Dim i As Integer
For i = 0 To 99
Console.Write("")
Next i
t2.Start()
'2つのスレッドが終了するまで待つ
t1.Join()
t2.Join()
End Sub
Private Shared Sub MyThread()
Dim i As Integer
For i = 0 To 199
'スレッド名を出力する
Console.Write(Thread.CurrentThread.Name)
Next i
End Sub
}}
#code(csharp){{
//using System.Threading;
//が宣言されているものとする
//エントリポイント
public static void Main()
{
//2つのThreadオブジェクトを作成する
Thread t1 = new Thread(new ThreadStart(MyThread));
t1.Name = "1";
Thread t2 = new Thread(new ThreadStart(MyThread));
t2.Name = "2";
//1つのスレッドを開始
t1.Start();
//しばらく待機の後2つ目のスレッドを開始
for (int i = 0; i < 100; i++)
Console.Write("");
t2.Start();
//2つのスレッドが終了するまで待つ
t1.Join();
t2.Join();
}
private static void MyThread()
{
for (int i = 0; i < 200; i++)
{
//スレッド名を出力する
Console.Write(Thread.CurrentThread.Name);
}
}
}}
結果は例えば次のようになります(スレッド1が"1"を、スレッ...
#pre{{
111111111111111111111111111111111111111111111111111111111...
111111111111222222222222222222222222222222222222222222222...
222222222222222222222222222222222222222222222222222222222...
222222222222222222222222222222222222222222222222222222222...
111111111111111111111111111111111111111111111111111111111...
1111111111111111111111111111111111111111111111122222222
}}
次に、2番目に実行するスレッドに最高の優先順位であるHighes...
#code(vbnet){{
'Imports System.Threading
'が宣言されているものとする
'エントリポイント
Public Shared Sub Main()
'2つのThreadオブジェクトを作成する
Dim t1 As New Thread(New ThreadStart(AddressOf MyThre...
t1.Name = "1"
Dim t2 As New Thread(New ThreadStart(AddressOf MyThre...
t2.Name = "2"
'2つ目のスレッドの優先順位を最高にする
t2.Priority = ThreadPriority.Highest
'1つのスレッドを開始
t1.Start()
'しばらく待機の後2つ目のスレッドを開始
Dim i As Integer
For i = 0 To 99
Console.Write("")
Next i
t2.Start()
'2つのスレッドが終了するまで待つ
t1.Join()
t2.Join()
End Sub
Private Shared Sub MyThread()
Dim i As Integer
For i = 0 To 199
'スレッド名を出力する
Console.Write(Thread.CurrentThread.Name)
Next i
End Sub
}}
#code(csharp){{
//using System.Threading;
//が宣言されているものとする
//エントリポイント
public static void Main()
{
//2つのThreadオブジェクトを作成する
Thread t1 = new Thread(new ThreadStart(MyThread));
t1.Name = "1";
Thread t2 = new Thread(new ThreadStart(MyThread));
t2.Name = "2";
//2つ目のスレッドの優先順位を最高にする
t2.Priority = ThreadPriority.Highest;
//1つのスレッドを開始
t1.Start();
//しばらく待機の後2つ目のスレッドを開始
for (int i = 0; i < 100; i++)
Console.Write("");
t2.Start();
//2つのスレッドが終了するまで待つ
t1.Join();
t2.Join();
}
private static void MyThread()
{
for (int i = 0; i < 200; i++)
{
//スレッド名を出力する
Console.Write(Thread.CurrentThread.Name);
}
}
}}
結果は例えば次のようになります。
#pre{{
111111111111111111111111111111111111111111111111111111111...
222222222222222222222222222222222222222222222222222222222...
222222222222222222222222222222222222222222222222222222222...
222222222222222222222222222222222222222222222222222222222...
111111111111111111111111111111111111111111111111111111111...
1111111111111111111111111111111111111111111111111111111
}}
はじめに優先順位がNormalのスレッド"1"が開始されますが、よ...
**コメント [#ga676940]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2003-10-21 (火) 06:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]