main() 메소드를 종료 한 후에도 코드를 실행할 가능성이 있습니까?프로그램이 main()을 종료 한 후에도 코드를 실행할 수 있습니까
답변
C 및 C++에서 atexit()을 통해 등록 된 함수는 main()
이 반환 된 후에 호출 할 수 있습니다. C의 ++에서
, static destructors도 main()
의 복귀 후 호출 할 수 있습니다.
내가 같은 것을 올리려고 한 것처럼 나는 당신을 투표했다. 하지만 기술적 인 측면에서, 주요 반환 전에 실행 된 atexit 호출은 등록되지 않았습니다. 바로 전에, 즉? – gnometorule
@gnometorule, main()'*이 *를 반환 할 것이라고 프로그램에서 어떻게 알 수 있습니까? 리턴 코드가 기다릴 때까지 기다리는 것이 더 합리적입니다 (런타임 코드는 처음에'main()'을 호출하는 것이기 때문에) 적절하게 행동하십시오. –
설명해 주셔서 감사합니다. 그것은 실제 질문이었습니다. 등록 된 atexit 함수를 호출하기 위해 exit sys 호출을 시각화했습니다.이 경우 exit 호출이 적절한 경우 그 다음에 호출이 반환됩니다. – gnometorule
어쩌면 다른 스레드가 main() 프로그램을 종료 한 후에도 계속 작업 할 수 있으므로 예라고 말할 수 있습니다.
public class Main extends Thread {
public static void main(String[] args) {
Thread thread = new Thread(new Main());
thread.start();
System.out.println("main is exiting");
}
@Override
public void run() {
try {
sleep(1000);
System.out.println("thread is running");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
은 백그라운드 스레드가 아니면 종료됩니다. –
아니요, 'exit (3)'을 호출하면 _all_ 스레드가 중지됩니다. 그래서'pthread_exit (3)'이 있는데, 하나의 스레드 만 종료 할 수 있습니다. – fge
이것은 불가능합니다. –
예 C#의 경우 : main()이 종료 된 후에 범위를 벗어난 객체의 종료자가 나중에 실행됩니다.
가끔은 편리합니다. 잠금 파일을 제거하려면
아니요, 불가능합니다. main 메소드가 존재하면 프로그램이 종료됩니다.
간단한 대답은 없습니다. 하지만 메인의 끝에서 언제나 새 스레드를 시작할 수 있으며 메인이 완료된 후에도 실행됩니다.
주된 방법은 스레드가 중지 될 때까지 기다립니다. 데몬 스레드 인 경우 종료됩니다. –
나는 동의하지 않는다. 이것을보십시오 : ** public class TestMain { public static void main (String [] args) { System.out.println ("main start"); 새로운 Thread (새의 Runnable() { 공공 무효 실행() { 동안 (사실) { } } }) 시작().; System.out.println ("주 끝"); } } ** 메인 메소드가 완료되었음을 의미하는 "메인 엔드"가 인쇄되어 있습니다. – Rox
나는 동의하지 않는다. JVM은 다른 스레드가 완료되기를 기다리면서 main 메소드에서 반환되기 직전에 중지됩니다. 따라서 main 메소드의 모든 명령문을 실행하지만 프로그램은 아직 종료되지 않습니다. –
C++ : 확실합니다. 전역 객체의 소멸자에 넣기 만하면 main
이 반환 된 후에 실행됩니다 (그러나 전역 객체가 아직 만들어지지 않았다는 보장은 없습니다).
(... 트릭은 실행 파일의 "진짜"엔트리 포인트는 일반적으로 main
아니라 전역을 초기화 또 다른 기능은, 주 당신을 호출하고 반환 할 때이 종료하기 전에 그들을 파괴한다는 것입니다,하지만)
당신이 가진 유일한 가능성은 fork()
, 부모의 exit()
입니다. 그 주위에는 다른 방법이 없습니다. 스레드가 도움이되지 않습니다.
C 및 C++에서 "정상"종료하는 동안 함수를 호출합니다 atexit(),있다.
C#에서 새 Thread
을 만들 수 있습니다 false로 IsBackground
을 설정합니다. Main
이 종료되지만 .NET Framework가 수행해야하는 작업을 응용 프로그램에서 계속 유지합니다.
static void Main(string[] args)
{
Thread thread = new Thread(() => {
Thread.Sleep(10000);
Console.WriteLine("Thread WriteLine");
});
thread.IsBackground = false;
thread.Start();
Console.WriteLine("Main WriteLine");
}
- 1. 초당 한 번 코드를 실행할 수 있습니까?
- 2. Perl 프로그램이 데이터베이스에 저장된 코드를 실행할 수 있습니까?
- 3. WPF 브라우저 응용 프로그램이 안전하지 않은 코드를 실행할 수 있습니까?
- 4. 응용 프로그램이 종료 된 후에도 세마포는 열려 있습니다.
- 5. SplashScreen은 응용 프로그램이 종료 된 후에도 열려 있습니다.
- 6. 설치 프로그램을 종료 한 후에도 제거가 계속 실행 중입니다.
- 7. 사용자가 브라우저를 닫은 후에도 Node.js가 프로세스를 계속 실행할 수 있습니까?
- 8. ASIHTTPRequest 응용 프로그램을 종료 한 후에도 다운로드 계속 재개
- 9. UNIX : 유닉스의 종료 코드를 무시할 수 있습니까?
- 10. "interact"후에도 expect 스크립트가 다른 명령을 계속 실행할 수 있습니까?
- 11. AWS DynamoDB에서 맞춤 코드를 실행할 수 있습니까?
- 12. 3 줄의 코드를 동시에 실행할 수 있습니까?
- 13. "with"블록에서 조건부로 코드를 실행할 수 있습니까?
- 14. 어떻게이 AJAX/JSONP 코드를 실행할 수 있습니까?
- 15. vba 매크로에서 C# 코드를 실행할 수 있습니까?
- 16. J # 코드를 JVM에서 실행할 수 있습니까
- 17. dalvik에서 C 코드를 실행할 수 있습니까
- 18. 프리즘 코드를 단계별로 실행할 수 있습니까?
- 19. iOS에서 코드를 다운로드하고 실행할 수 있습니까
- 20. C가 js 코드를 실행할 수 있습니까?
- 21. XSLT에서 한 번만 템플릿을 실행할 수 있습니까?
- 22. apache 프로세스를 종료 한 후에도 항상 httpd.conf가 사용 중입니까?
- 23. 내 앱을 "종료"한 후에도 DDMS에서 내 앱의 프로세스와 어떻게 상호 작용할 수 있습니까?
- 24. vb6을 사용하여 응용 프로그램을 종료 한 후에도 표시되는 오류 메시지 또는 창을 표시 할 수 있습니까?
- 25. 응용 프로그램을 종료 한 후에도 응용 프로그램을 계속 실행하려면 어떻게합니까?
- 26. .NET 메모리가 함수를 종료 한 후에도 해제되지 않음
- 27. CREATE 또는 REPLACE를 수행 한 후에도 오라클이 패키지의 이전 버전을 실행할 수 있습니까?
- 28. 활동/앱이 종료 된 후에도 개체 유지하기
- 29. 장치에서 코드를 실행할 수 없습니다.
- 30. 응용 프로그램이 "강제 종료"되면 종료 훅이 있습니까?
달성하고자하는 구체적인 코드 예제를 제공하지 않는 이유는 무엇입니까? – Adam
모든 언어를 사용하는 것이 의미가 없습니다. –
그런 일이 가능하다고 생각하는 이유는 무엇입니까? – karlphillip