Size: a a a

2020 May 08

MK

Maxim Koltsov in Haskell
AsyncException(UserInterrupt) называется
источник

IK

Ilya Kos in Haskell
да
источник

IK

Ilya Kos in Haskell
Я пытался его ловить обычным catch, но у меня там какие-то проблемы были
источник

IK

Ilya Kos in Haskell
по-моему он его просто не ловил
источник

AV

Alexander Vershilov in Haskell
UserInterrupt в главном треде
источник

AV

Alexander Vershilov in Haskell
Обязательно в главном
источник

AV

Alexander Vershilov in Haskell
По первому ^C RTS сгенерирует исключение, а по второму просто всё прибьёт не спрашивая
источник

IK

Ilya Kos in Haskell
Alexander Vershilov
Обязательно в главном
Возможно у меня в этом и была проблема, но по-моему я в главном его и пытался поймать
источник

AV

Alexander Vershilov in Haskell
Причем прибьёт просто завершив выполнение потоков без исплючений
источник

AV

Alexander Vershilov in Haskell
поэтому прибивать haskell программы прям-щас хорошо двойным ^C
источник

AV

Alexander Vershilov in Haskell
Обработку сигналов можно заменить на свою отключить базовую и делать что хочешь
источник

IK

Ilya Kos in Haskell
как такое вообще адекватно делать если у меня какая-то штука в бесконечном цикле крутится, и я хочу по ^C подождать пока закончится текущая итерация, после сделать еще что-то чтобы все завершить, а потом сдохнуть? В голову приходило только городить что-то из MVar и тому подобного руками. Возможно есть уже какое-то стандратное решение для такого?
источник

IK

Ilya Kos in Haskell
и крутится оно в forkIO
источник

AV

Alexander Vershilov in Haskell
А что в главном треде?
источник

AV

Alexander Vershilov in Haskell
Вообще я не видел хороших либ на общий случай
источник

AV

Alexander Vershilov in Haskell
Они или не умеют, что надо или монстры
источник

AV

Alexander Vershilov in Haskell
Общий смысл: ты должен словить исключение в главном треде, после этого уведомить все остальные и подождать их. Как именно уведомить - зависит от твой задачи
источник

AV

Alexander Vershilov in Haskell
Способы уведомления:
1. исключение
2. сигнальная переменная

Способы ожидания:
1. переменная синхронизации
источник

AV

Alexander Vershilov in Haskell
Со способами ожидания можно сказать: используй async там есть все нужные примитивы
источник

AV

Alexander Vershilov in Haskell
Про уведомление, в принципе если это нормально, если тебя  прервут, то исключения проще
источник