Поток сигнальные основы

Я знаю C#, но я испытываю затруднения для понимания некоторых основных (я думаю), понятия как передача сигналов.

Я провел некоторое время, ища некоторые примеры, даже здесь, без удачи. Возможно, некоторые примеры или реальный простой сценарий были бы большими понять это.

13
задан johnnyRose 26 February 2017 в 01:25
поделиться

2 ответа

Вот пример настраиваемого консольного приложения для вас. Не совсем хороший сценарий в реальном мире, но там есть использование потоковой сигнализации.

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        bool isCompleted = false;
        int diceRollResult = 0;

        // AutoResetEvent is one type of the WaitHandle that you can use for signaling purpose.
        AutoResetEvent waitHandle = new AutoResetEvent(false);

        Thread thread = new Thread(delegate() {
            Random random = new Random();
            int numberOfTimesToLoop = random.Next(1, 10);

            for (int i = 0; i < numberOfTimesToLoop - 1; i++) {
                diceRollResult = random.Next(1, 6);

                // Signal the waiting thread so that it knows the result is ready.
                waitHandle.Set();

                // Sleep so that the waiting thread have enough time to get the result properly - no race condition.
                Thread.Sleep(1000);
            }

            diceRollResult = random.Next(1, 6);
            isCompleted = true;

            // Signal the waiting thread so that it knows the result is ready.
            waitHandle.Set();
        });

        thread.Start();

        while (!isCompleted) {
            // Wait for signal from the dice rolling thread.
            waitHandle.WaitOne();
            Console.WriteLine("Dice roll result: {0}", diceRollResult);
        }

        Console.Write("Dice roll completed. Press any key to quit...");
        Console.ReadKey(true);
    }
}
24
ответ дан 1 December 2019 в 19:49
поделиться

Это довольно большая область для меня, чтобы дать вам определенные указания.

Для понимания таких концепций, как сигнализация, эта ссылка на Синхронизация потоков будет хорошим местом для начала. Там тоже есть примеры. Затем вы можете углубиться в конкретные типы .net, основываясь на том, что вы пытаетесь сделать... сигнал между потоками внутри процесса или между процессами и т.д..

3
ответ дан 1 December 2019 в 19:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: