【发布时间】:2009-11-11 19:48:15
【问题描述】:
如果我的程序没有正确关闭,系统就会变得不稳定。真的没有解决方法。所以,如果我的程序崩溃并且没有正确地关闭,那么当他尝试再次运行它时,我需要告诉用户系统处于不稳定状态。正确的方法是在我启动时创建一个锁定文件,并在我正确退出时删除它。如果我开始并且该文件存在,那么我知道我之前崩溃了。这是正确的方法吗?
【问题讨论】:
如果我的程序没有正确关闭,系统就会变得不稳定。真的没有解决方法。所以,如果我的程序崩溃并且没有正确地关闭,那么当他尝试再次运行它时,我需要告诉用户系统处于不稳定状态。正确的方法是在我启动时创建一个锁定文件,并在我正确退出时删除它。如果我开始并且该文件存在,那么我知道我之前崩溃了。这是正确的方法吗?
【问题讨论】:
两件事可能有用:
【讨论】:
如果您的程序崩溃并重新启动机器,事情是否仍处于不稳定状态?如果不是,那么锁定文件不是您希望采取的方法,因为该文件在重新启动后仍然存在。尝试使用global atom table 的解决方案。
// Test if the application has crashed since the last reboot
ATOM myAtom = GlobalFindAtom ("MySecretName");
if (myAtom != 0)
{
// We crashed on last run, inform user and exit
// ...
exit (0);
}
// Create a global atom which will be destroyed only on clean termination
myAtom = GlobalAddAtom ("MySecretName");
// Run your main program here
// ...
// Clean termination, delete the atom
GlobalDeleteAtom (myAtom);
【讨论】:
请您考虑一下,但在与您的应用无关的情况下,锁定文件可能不会被删除,例如网络错误、文件系统错误、操作系统错误。
因此,根据您的要求,如果知道当前状态是否有效是绝对关键的,您可能需要通过检查所有因变量和状态来确定有效性,而不是仅仅依赖锁定文件。否则,它可能是一种监视退出状态的简单方法。只是不要依赖它来确定是否应该重新发射导弹。
【讨论】:
Microsoft Word(也包括 PPT/Excel)遵循类似的方法。当以写入模式打开文档时会创建一个隐藏文件,一旦应用程序正常退出,它就会被删除。该文件可能包含更多信息,例如每隔“x”分钟自动保存文档等,但关键是您的观点是有效的:-)
【讨论】: