3

Netduinoボードを使用していますが、NativeEventHandler(ボタン)の終了に問題があります。問題は、join()関数でメインスレッドがスタックしていることです。実行後に子スレッドが解放されない理由がわかりません。

public class Program
{
    private static Thread mainThread;
    private static Thread childThread;     

    private static InterruptPort button = new InterruptPort(Pins.GPIO_PIN_D1, true, Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeLevelHigh);

    private static OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);

    public static void Main()
    {            
        mainThread = Thread.CurrentThread;
        Thread.Sleep(1000);
        while (true)
        {
            Thread.Sleep(100);
            button.OnInterrupt += new NativeEventHandler(ButtonEvent);
            mainThread.Suspend();
            childThread.Join();//It stuck here.
            Thread.Sleep(100);
            button.EnableInterrupt();
            button.ClearInterrupt();  
        }
    }

    private static void ButtonEvent(uint port, uint state, DateTime time)
    {
        childThread = Thread.CurrentThread;
        button.DisableInterrupt();          
        mainThread.Resume();
       // Thread.CurrentThread.Abort(); this .Abort() seems doesn't terminate the thread either.
    }
}
4

1 に答える 1

4

まず、イベントにサブスクライブすると、サブスクライブを解除するまでサブスクライブされたままになります。そのため、一度だけ購読する必要があります。

このようにnetduinoを実行できると思います...

public class Program
{
    private static InterruptPort button = new InterruptPort(Pins.GPIO_PIN_D1, true, Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeLevelHigh);

    private static OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);

    public static void Main()
    {            
        button.OnInterrupt += new NativeEventHandler(ButtonEvent);
        Thread.Sleep(Timeout.Infinite);
    }

    private static void ButtonEvent(uint port, uint state, DateTime time)
    {
        ... do whatever here ...
    }
}

したがって、基本的に、ボタンが押されたときに何をしたいのかは、ButtonEvent で行います。

それ以上のことをする必要はないと思います。

Thread.Sleep(Timeout.Infinite);

単にプログラムの実行を維持するのに役立ちます。

だから...ここで何でもしてください...あなたはあなたのLEDを点滅させるか、あなたがしたいことを何でもすることができます.

于 2012-12-20T23:43:32.827 に答える