Winapi a";中CreateMutex和COPYDATASTRUCT的Haskell Win32等价物;单实例应用程序";? 我目前使用的资源灯“非托管”Windows C++应用程序使用:

Winapi a";中CreateMutex和COPYDATASTRUCT的Haskell Win32等价物;单实例应用程序";? 我目前使用的资源灯“非托管”Windows C++应用程序使用:,winapi,haskell,Winapi,Haskell,CreateMutex以确保最多只有一个应用程序实例 COPYDATASTRUCT将命令行参数传递给单个实例,如果另一个实例尝试启动(发送数据后,它将退出) 用例很简单:启动一个新的应用程序实例以打开命令行上指定的文件,或者在以前启动的应用程序实例中打开该文件 如何在Haskell程序中实现相同的行为?GHC附带的中似乎没有提供CreateMutex。您需要自己使用绑定到它,或者以跨平台的方式模拟它。Linux上常用的一个技巧是选择一个特定的文件名作为“互斥体”;如果它不存在,则创建它并记下如

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

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

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


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

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


    对于IPC,我认为有许多跨平台接口。有一个优秀的名单;特别适合在Haskell中执行此任务,以及。对于后两者,您可能需要Cygwin,因为它们最终取决于安装unix软件包。

    谢谢,Daniel。我想我会把重点放在这个特殊项目的外国金融机构方法上。我看到FFI Cook的书中有一些关于FFI中结构的信息,希望COPYDATASTRUCT中的void*处理方式与他们展示的c字符串示例类似: