• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Иллюстрированный самоучитель по Architecture .NET

    Изоляция потоков

    Исключение, сгенерированное одним потоком, не приведет к отказу в работе другого потока. Пример Threadlsolation демонстрирует это.

    _gc class tm
    // класс сборщика мусора tm
    {
    public:
    void m() {
    Console::WriteLine(
    "Thread {0} started", // "Поток {0} начал работу",
    Thread::CurrentThread › GetHashCode().ToString());
    Thread::Sleep(1000); // Поток:: Бездействует forfint i = 0; i < 10; i++)
    Console::WriteLine(i); Console::WriteLine(
    "Thread {0} done",
    // "Поток {0} закончил",
    Thread::CurrentThread › GetHashCode{).ToString());
    }
    };
    _gc class te
    // класс сборщика мусора te
    {
    public:
    void tue ()
    {
    Console::WriteLine (
    "Thread {0} started", // "Поток {0} начал работу",
    Thread::CurrentThread › GetHashCode().ToString());
    Exception *e = new Exception("Thread Exception");
    // Исключение *е = новое Исключение ("Исключение Потока"); throw e;
    }
    };
    _gc class Threadlsolation
    // класс сборщика мусора Threadlsolation
    {
    public:
    static void Main()
    {
    tm *tt = new tm;
    // новый tm te *tex = new te;
    // новый te
    // создать делегат для потоков
    ThreadStart *tsl = new ThreadStart(tt, tm::m);
    ThreadStart *ts2 = new ThreadStart(tex, te::tue);
    Thread *threadl = new Thread(tsl);
    // новый Поток (tsl) Thread *thread2 = new Thread(ts2);
    // новый Поток (ts2)
    Console::WriteLine(
    "Thread {0} starting new threads.",
    // "Поток {0} запускает новые потоки.",
    Thread::CurrentThread › GetHashCode().ToString());
    threadl › Start(); // Пуск
    thread2 › Start(); // Пуск
    Console::WriteLine(
    "Thiead {0} done.", // "Поток {0} закончил.",
    Thread::CurrentThread › GetHashCode().ToString());
    }
    };
    

    Программа генерирует следующую выдачу. Обращаем внимание читателя на то, что второй поток может продолжать выводить числа даже тогда, когда первый поток прерывается в результате появления необрабатываемого исключения. И, кроме того, может закончиться главный поток, породивший другие два потока, причем это тоже не приведет к завершению этих двух потоков.

    Thread 2 starting new threads.
    Thread 2 done.
    Thread 5 started
    Thread 6 started
    Unhandled Exception: System.Exception:
    Thread Exception at te.tue() in
    c:\oi\netcpp\chap8\threadisolation\
    threadisolation.h:line 32 0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Thread 5 done
    

    Перевод такой:

    Поток 2 запускает новые потоки. Поток 2 работу закончил. Поток 5 стартовал Поток 6 стартовал
    Необработанное Исключение:
    Система.Исключение: Исключение Потока в te.tue () в
    c:\oi\netcpp\chap8\threadisolation\
    threadisolation.h:line 32 0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Поток 5 работу закончил
    

    Класс AppDomain (Прикладная область) (обсуждаемый в данной главе позже) позволяет устанавливать обработчик для перехвата исключения UnhandledException.

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.