アクセス数 累計:000,124,981 昨日:000,000,099 本日:000,000,003
|
|
|
|
【Amazon ランキング:ゲーム - Wii U】
|
|
パソコンは日々進化し続けています。現在では、昔のように一つの処理でCPUを占有してしまうようなことはほとんどなくなってきました。
そこで余裕のあるCPUパワーをフルに活用するための有効な手段としてマルチスレッドプログラミングというものが存在します。 |
|
マルチスレッドプログラミングというのはたいへん奥が深いので簡単には説明できないのですが、通常の処理を1本の川にたとえて説明すると、マルチスレッドはメインとなる1本の川から分岐させてたくさんの水路を作るといった感じでしょうか?
1本の川ではたくさんの船を通すことができないですが水路を分岐させてたくさんの船が通れるようにすればより多くの荷物が運べるようになります。ただし、川を分岐させるということは水量は減るわけで重い荷物を乗せると川底に船が当たって進めなくなります。
マルチスレッドも同じことが言えて、軽い処理を複数に分担させて行うには非常に効果的に機能しますが重い処理にはちょっと不向きな傾向があります。ただはじめに行ったようにマルチスレッドプログラミングは奥が深いのでそんな場合でも、重い処理を行うスレッドには水量を増やしたり、キューにためて順番待ちをさせたりといろいろできます。
マルチスレッドを完全にマスターするのは大変ですがこれからすこしずつ勉強してくことにしましょう。
|
スレッドの開始 |
マルチスレッドで処理を行うには Thread クラスを使用します。 Thread クラスを new する際に指定するメソッドはメインのスレッドとは別のスレッドで実行されます。
[VB]
Dim th As Thread = New Thread(AddressOf ThreadProc)
th.Start()
[C#]
Thread th = new Thread(ThreadProc);
th.Start();
|
フォームの作成 |
|
Form1 に Button, ProgressBar,Timer をはりつけます。
プロパティの内容はすべてデフォルトです。
Button:[Button1]
ProgressBar:[ProgressBar1]
Timer:[Timer1]
|
|
VB[Form1.vb] |
Imports System.Threading
Public Class Form1
Private _progressValue As Integer = 0
Public Sub New()
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' プログレスバー更新タイマー開始
timer1.Interval = 200
timer1.Enabled = True
End Sub
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles button1.Click
' スレッド開始
Dim th As Thread = New Thread(AddressOf ThreadProc)
th.Start()
End Sub
' スレッド処理
Private Sub ThreadProc()
For i As Integer = 0 To 10
'プログレスの値加算
_progressValue = i * 10
Thread.Sleep(1000)
Next
End Sub
Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles timer1.Tick
' プログレスバー更新
Me.progressBar1.Value = _progressValue
End Sub
End Class
|
|
C#[Form1.cs] |
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace ThreadCS
{
public partial class Form1 : Form
{
private int _progressValue = 0;
public Form1()
{
InitializeComponent();
// プログレス更新タイマー開始
timer1.Interval = 200;
timer1.Enabled = true;
}
private void button1_Click(object sender, EventArgs e)
{
// スレッド開始
Thread th = new Thread(ThreadProc);
th.Start();
}
// スレッド処理
private void ThreadProc()
{
for (int i = 0; i <= 10; i++)
{
// プログレスの値加算
_progressValue = i * 10;
Thread.Sleep(1000);
}
}
// プログレスバーを更新するタイマー
private void timer1_Tick(object sender, EventArgs e)
{
// プログレスバー更新
this.progressBar1.Value = _progressValue;
}
}
}
|
|
|
※このページで紹介しているサンプルコードについて管理者は動作保障をいたしません※
※サンプルコードを使用する場合は、自己責任でお願いします※
|
【楽天 ランキング:パソコン・周辺機器 - パソコン周辺機器】
|
|
|
|
このサイトはフリーソフトのMerge HTMLで作成されています。
このサイトはリンクフリーです。
|
ページの先頭に戻る |
Copyright© 2010-2015 Jun.Shiozaki All rights reserved. |
|
|
|