Delphi XE VCL 是否支持确保仅运行一个应用程序实例?
过去,我使用库代码来控制互斥体,这似乎总是很复杂。当我在 Delphi XE 中开始一个新项目时,我想知道我是否需要挖掘旧代码,或者 XE 中是否已经内置了支持?或者是否有另一种易于应用、美观且现代的代码?
当您启动应用程序时,您将创建一个命名的互斥体。查看GetLastError
查看其他实例是否已经在运行。
Put this code right after "begin" in your DPR file. Replace the GUID with one of your own. When I need a text constant that's unlikely to be used for anything else, I usually just hit Ctrl+G to get a GUID!
if CreateMutex(nil, True, '6EACD0BF-F3E0-44D9-91E7-47467B5A2B6A') = 0 then
RaiseLastOSError;
if GetLastError = ERROR_ALREADY_EXISTS then
Exit;
代码可能看起来正在泄漏句柄,因为它没有保存返回CreateMutex
。它不是。当我们的应用程序终止时,Windows 将自动释放句柄,这对我们来说绝对没问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)