0

我目前有一个资源轻的“非托管”Windows C++ 应用程序,它使用:

  • CreateMutex以确保最多有一个应用程序实例。

  • COPYDATASTRUCT将命令行参数传递给该单个实例,如果另一个实例尝试启动(发送数据后,它将退出)。

用例很简单:启动一个新的应用程序实例以打开在命令行上指定的文件,或者在先前启动的应用程序实例中打开该文件。

如何在 Haskell 程序中实现相同的行为?

4

1 回答 1

0

GHC 随附的软件包中似乎CreateMutex没有提供。您需要使用FFI自己绑定到它,或者以跨平台的方式模拟它。Linux 上常用的一个技巧是选择一个特定的文件名作为“互斥体”。如果它不存在,则创建它并记下如何与您联系,然后在退出时将其删除,如果存在,则从中读取联系信息以了解如何连接到已运行的进程。这种方法确实有缺点:如果您的应用程序或整个计算机出现故障,您将获得过时的联系信息。Win32

对于 IPC,我认为有许多跨平台接口。维基百科有一个很好的列表;特别适合在 Haskell 中执行此任务的是套接字(命名的)管道dbus。对于后两者,您可能需要 Cygwin,因为它们最终依赖于安装 unix 包。

于 2012-07-15T14:34:35.373 回答