Есть ли способ остановить выполнение, что-то вроде SIG_ABRT, но сразу, даже если мы не на главной теме?Остановить выполнение приложения немедленно
ответ
Core Foundation имеет макрос HALT
, который должен сделать трюк, если вы действительно, действительно думаю, что это нужно сделать это:
#if defined(__ppc__)
#define HALT do {asm __volatile__("trap"); kill(getpid(), 9); } while (0)
#elif defined(__i386__) || defined(__x86_64__)
#if defined(__GNUC__)
#define HALT do {asm __volatile__("int3"); kill(getpid(), 9); } while (0)
#elif defined(_MSC_VER)
#define HALT do { DebugBreak(); abort(); } while (0)
#else
#error Compiler not supported
#endif
#endif
#if defined(__arm__)
#define HALT do {asm __volatile__("bkpt 0xCF"); kill(getpid(), 9); } while (0)
#endif
Если вы используете приложение Macintosh, «[[NSApp sharedApplication] terminate: self]
» будет работать.
На iPhone, вы можете даже сделать «exit(-1)
», но Apple, будет НЕ принимать какие-либо приложения, которые внезапно или каким-либо образом оканчиваются кроме пользователя убивая сами приложения. Here is a related question with some useful answers for you.
Предполагая, что вам не нравится выход() или _exit (), которые имеют некоторые очистки семантики, вы можете пойти с с
#include <signal.h>
kill(getpid(), SIGKILL);
И если вы на окнах (предполагается, что не так «какао» отмеченном), вы можете использовать
TerminateProcess(GetCurrentProcess(), -1);
Это все довольно суровое, поэтому все должно быть довольно плохо для этого.
- 1. Остановить выполнение приложения ASP.NET
- 2. Остановить метод/объект немедленно?
- 3. Остановить поток немедленно
- 4. Остановить немедленно NSTimer
- 5. Выполнение по умолчанию немедленно
- 6. Выполнение «mongod» немедленно прекращается
- 7. Невозможно немедленно остановить воспроизведение фильма
- 8. Как немедленно остановить загрузку UIWebView
- 9. Остановить выполнение JNI-метода
- 10. Немедленно выполнение приложения .net в Win CE после загрузки
- 11. ClickOnce Setup немедленно прекращает выполнение
- 12. Вставьте строку, используя выполнение Немедленно
- 13. Как немедленно остановить декодирование в GPUImage?
- 14. Как остановить сервис немедленно и навсегда
- 15. Есть ли способ немедленно остановить поток?
- 16. Остановить компиляцию немедленно с помощью параллельного make
- 17. Как остановить выполнение кода PHP?
- 18. Сбой приложения немедленно с FileNotFoundException
- 19. SQL Server: Выполнение транзакции всегда немедленно?
- 20. Остановить запланированное выполнение JavaScript
- 21. Остановить выполнение скрипта Ruby
- 22. Остановить выполнение в smalltalk
- 23. Как остановить выполнение Javascript
- 24. остановить выполнение javascript
- 25. Остановить выполнение скрипта sql
- 26. Остановить выполнение скрипта php
- 27. остановить выполнение Javascript?
- 28. Не удалось остановить выполнение
- 29. Как остановить выполнение HttpConnection.getInputStream()?
- 30. Остановить выполнение кода
Это хорошо, но есть некоторые проблемы. Команды asm являются, по существу, генераторами останова, что отлично, если вы ожидаете подключения отладчика, но, возможно, не того, что вы хотите в противном случае (то есть: в окнах он по умолчанию запускает диалог сбоя/отладки). О, MSC, вызывающий abort(), в порядке, но все еще имеет больше инфраструктуры/cruft, чем TerminateProcess() – Joe
@Joe: Я не думаю, что делать это каким-либо образом - это хорошая идея вообще. CF использует этот макрос только для фатальных ошибок. Правильный ответ на вопрос, насколько мне известно, - «Да, но вы не должны». Обратите внимание, что я не писал их, и что они активно используются. –
Это делает трюк красиво! Спасибо! @Joe: генераторы точек останова * идеально подходят для моего случая. – andyvn22