NetduinoでキャラクタLCDの続きになります。というか、その一つ前のNetduinoでマルチスレッドの続きになります。
Netduinoというよりは、C#の小ネタです。C#には匿名メソッド(anonymous method)という機能があります。
前回のマルチスレッドでは、マルチスレッドで動かすflashというメソッドを作っていました。どうせ1ヶ所からしか呼ばれないし、1回しか使わないメソッドにわざわざ名前をつけるのはめんどくさい、というときに使えるのが匿名メソッドです。具体的にはメソッドの名前を書いているところに、直接メソッドの中身を書けます。
Thread thread = new Thread(flash);
のように書いていたのを
Thread thread = new Thread( delegate(){ メソッドの中身 } );
のように書くことができます。
前回のマルチスレッドの例題を書き直したものになります。
なんというか、NetduinoじゃなくてもいいC#のお話ですね。
もしかして、これってクロージャっていうものなんでしょうか?
Netduinoというよりは、C#の小ネタです。C#には匿名メソッド(anonymous method)という機能があります。
前回のマルチスレッドでは、マルチスレッドで動かすflashというメソッドを作っていました。どうせ1ヶ所からしか呼ばれないし、1回しか使わないメソッドにわざわざ名前をつけるのはめんどくさい、というときに使えるのが匿名メソッドです。具体的にはメソッドの名前を書いているところに、直接メソッドの中身を書けます。
Thread thread = new Thread(flash);
のように書いていたのを
Thread thread = new Thread( delegate(){ メソッドの中身 } );
のように書くことができます。
前回のマルチスレッドの例題を書き直したものになります。
using System; using System.Threading; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware; using SecretLabs.NETMF.Hardware.Netduino; namespace ThreadTest2 { public class Program { static OutputPort LED1 = new OutputPort(Pins.ONBOARD_LED, false); static OutputPort LED2 = new OutputPort(Pins.GPIO_PIN_D13, false); public static void Main() { // write your code here Debug.Print("Hello, Multi-Threading"); // 今回の新しい部分 new Thread(delegate() { // スレッドの本体(並列実行になる) while (true) { LED1.Write(!LED1.Read()); // LED1反転 Thread.Sleep(250); // 250ミリ秒待つ } }).Start(); // 本スレッド側でもLED2をチカチカ while (true) { LED2.Write(!LED2.Read()); // LED2反転 Thread.Sleep(150); // 150ミリ秒待つ } } } }
なんというか、NetduinoじゃなくてもいいC#のお話ですね。
もしかして、これってクロージャっていうものなんでしょうか?