Предположим, у меня есть петля, которая ждет ввода пользователем. Если пользователь нажимает Ctrl + C, программа завершает работу нормально. Тем не менее, я хотел бы сделать пару вещей перед выходом. Можно ли запустить функцию после нажатия Ctrl + C, и программа собирается выйти?Как запустить определенный код/функцию до выхода программы в D?
ответ
Вы можете использовать core.stdc.signal
, который содержит привязки к заголовку C signal.h
. Теперь, если это для Windows, вы можете столкнуться с некоторыми problems:
SIGINT не поддерживается ни для какого приложения Win32. Когда возникает компромисс между CTRL +, операционные системы Win32 генерируют новый поток до , специально обрабатывают это прерывание. Это может привести к тому, что однопотоковое приложение , например одно в UNIX, станет многопоточным и вызовет непредсказуемое поведение .
__gshared bool running = true;
extern(C) void handleInterrupt(int) nothrow @nogc
{
running = false;
}
void main()
{
import core.stdc.signal;
signal(SIGINT, &handleInterrupt);
scope(exit)
{
//Cleanup
import std.stdio : writeln;
writeln("Done");
}
while(running)
{
//Do some work
}
}
http://stackoverflow.com/questions/16826097/equivalent-to-sigint-posix-signal-for-catching-ctrlc-under-windows-mingw показывает, как это сделать в Windows. Хороший ответ кстати! – DejanLekic
Вы могли бы сойти с рук что-то вроде этого:
void main() {
try {
dostuff();
} finally {
printf("bye\n");
};
};
Окончательно блок будет работать, даже если dostuff()
бросает Error
или Throwable
. Я не очень хорошо знаком со стандартными вводами, консольными сигналами и т. Д., Но попробую хотя бы попробовать.
Более того, даже если dostuff()
звонит Runtime.terminate()
, блок finally все равно будет работать. То же самое нельзя сказать о abort()
.
, который не будет делать этого в Linux, хотя ctrl + c по умолчанию обходит механизм исключения. –
- 1. Пауза программы до выхода внешней программы
- 2. Как запустить код перед выходом программы?
- 3. Как gdb извлекает код выхода целевой программы?
- 4. Использование запустить определенный код первого
- 5. Обновление зависимостей Свойство до выхода программы
- 6. Участок не генерируется до выхода программы
- 7. получить код выхода для программы python
- 8. Поиск выхода программы c
- 9. Как создать код выхода для входа пользователя для этой программы?
- 10. bash - Как продолжить запуск программы до ее выхода с 0
- 11. Как просушить код программы «двоичный до десятичного»
- 12. Выхода программы С участием до/после инкремента и указателя
- 13. Запустить код instagram через определенный промежуток времени
- 14. Почему мой вывод не отображается до выхода программы?
- 15. Как считать за определенное количество секунд до выхода из программы
- 16. Как запустить функцию postgressql
- 17. Посмотреть код выхода программы (После того, как программа вышла)
- 18. Как запустить функцию без прерывания программы в python?
- 19. Как получить код выхода программы, вызванный системным вызовом?
- 20. Как запустить Java-программы
- 21. Как запустить код до контроллеров инициализированы
- 22. Запустить c-код из программы загрузчика
- 23. Как подождать до выхода MSTSC.exe
- 24. Как запустить определенный код до и после каждого модульного теста в python
- 25. Как взять управление форматированием выхода программы?
- 26. Как ожидать выхода программы в gtest?
- 27. Как запустить команду до выхода из сценария Bash?
- 28. Причина выхода моей программы
- 29. Как запустить исходный код программы просмотра Android в eclipse?
- 30. Perl: невозможно получить правильный код выхода из внешней программы
Вы работаете в Windows или Linux? (или что-то еще) –