即使程序退出main()方法,是否有可能执行代码?
答案 0 :(得分:6)
在C和C ++中,可以在main()
返回后调用通过atexit()注册的函数。
在C ++中,main()
也可以在{{1}}返回后调用。
答案 1 :(得分:2)
也许其他一些线程可以在程序退出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();
}
}
}
答案 2 :(得分:1)
对于C#是的:只有在main()退出后才会超出范围的对象的终结符将在之后执行。
这有时会派上用场,例如删除锁定文件
答案 3 :(得分:1)
C ++:当然。只需将它放入全局对象的析构函数中,它将在main
返回后运行(但请记住,不能保证仍然构造任何全局对象)。
(...虽然,诀窍是可执行文件的“真实”入口点通常不是你的main
,而是初始化全局变量的另一个函数,调用你的main并在它返回时它会在终止之前销毁它们)
答案 4 :(得分:1)
您唯一的可能性是fork()
和父级exit()
。除此之外别无他法。线程无济于事。
答案 5 :(得分:1)
在C和C ++中,有atexit(),它会在“正常”终止期间调用一个函数。
答案 6 :(得分:0)
简单的答案是否定的。但是你总是可以在main的末尾开始一个新的线程,它甚至会在main完成之后执行。
答案 7 :(得分:0)
在C#中,您可以创建新的Thread
并将IsBackground
设置为false。 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");
}
答案 8 :(得分:-1)
不,这是不可能的。当主方法存在时,程序终止。