C#・スレッド
■ はじめに * 以下の関連記事のC#版。 【Java】【非同期】セマフォ(Semaphore) https://blogs.yahoo.co.jp/dk521123/34264650.html セマフォ(Semaphore)とは? * 以下の関連記事を参照のこと 【非同期】非同期・スレッドに関する用語 https://blogs.yaho…
■ サンプル using System; using System.Threading; using System.Windows.Forms; namespace SampleForm { public partial class Form1 : Form { private WaitCallback waitCallback; public Form1() { InitializeComponent(); } private void Form1_Load(ob…
■ スレッド セーフなコレクション * From .NET Framework 4 * System.Collections.Concurrent 名前空間が導入 (Concurrent = 同時) Concurrentに属するコレクション型 【1】BlockingCollection 【2】ConcurrentDictionary 【3】ConcurrentQueue 【4】Con…
■ はじめに * C# で、 Producer-Consumerパターン を実装することを調べてたら 「BlockingCollection」がでてきたので、纏める Producer-Consumer パターンについて * Producer-Consumerパターン については、以下の関連記事を参照。 https://blogs.yahoo.co…
■ 引数を渡すには... * ParameterizedThreadStartデリゲートを使う * 引数の型は、object型1つ。 ■ サンプル 例1 private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread( new ParameterizedThreadStart(this.Proccess)); Li…
■ スレッド・プログラムのポイント 以下のクラスで実装していく * Thread(Start()メソッド) * ManualResetEvent(WaitOne()メソッド、Reset()メソッド、Set()メソッド) ■ サンプル // 非シグナル状態 ManualResetEvent manualResetEvent = new ManualRese…
■ メソッド ManualResetEvent.WaitOneメソッド * スレッドをブロック * ManualResetEvent.Setメソッドを呼び出すまで待機 ManualResetEvent.Setメソッド * 指定したイベントの状態をシグナル状態に設定 ■ サンプル // 非シグナル状態でManualResetEventオブ…
■ C# でのロック * データの不整合を防ぐ排他制御(exclusive operation)のためのロックの仕方は、C#では以下の通り。 【1】 lock ステートメント ... .NET4.0以降 【2】 Monitor.Enter() / Monitor.Exit() ... .NET4.0より前 https://docs.microsoft.com/j…
■ Parallel.For サンプル 例1 for (int x = 0; x < 100; x++) { this.MethodA(x); } private void MethodA(int counter) { // 重い処理 } 例2 // 処理1と同じ処理。ただし、非同期なので、0~100のランダムに実行される。 Parallel.For(0, 100, (x) => this.…
■ はじめに http://www.clks.jp/csg/gt001.html に面白い技術があったのでメモ。 ■ 周辺技術 Forms.Application.DoEvents() アプリケーションのメッセージ・キューにたまったすべてのWindowsメッセージを処理するためのもの 補足 すべてのWindowsメッセージ…
■ スレッドに関する用語 * 以下の関連記事を参照のこと。 https://blogs.yahoo.co.jp/dk521123/37076571.html ■ Threadクラス メソッド Join() * スレッドの終了を待ち合わせる メンバ変数 ThreadState 列挙体 * スレッドの状態を調べる http://msdn.microso…
■ 実装上での必要事項 * 以下の3つのイベントとキャンセル時の処理を実装する必要がある [1] 重い処理を行う『DoWork』イベント・ハンドラ(別スレッドで実行される) [2] 進捗状況を表示するための『ProgressChanged』イベント・ハンドラ [3] 処理完了時に…