【问题标题】:How can one synchronize an external application with a DigitalMicrograph script?如何将外部应用程序与 DigitalMicrograph 脚本同步?
【发布时间】:2015-02-16 16:03:59
【问题描述】:

这个问题的灵感来自问题'Call script from command line'

除了DigitalMicrograph之外,应用程序中如何编写一个作用于“触发事件”的脚本?

即一些脚本功能应该由外部应用程序触发。

【问题讨论】:

    标签: events synchronization external dm-script


    【解决方案1】:

    脚本语言在其当前状态下不提供许多“外部”接口。可以使用命令LaunchExternalProcess调出到外部进程并等待进程完成,但是没有直接的方法让外部进程调入,即在 DigitalMicrograph 中启动脚本操作。

    但是,可以通过将系统的文件系统用作消息队列来解决该问题。为此,请在后台运行一个脚本,定期检查某个文件是否存在,并让 external 应用程序在它想要​​触发 DigitalMicrograph 中的脚本操作时创建这样的文件。文件内容(如果是简单的文本文件)也可用于在两个应用程序之间传输信息。

    这是一个示例脚本,它将等待文件Trigger.txt 出现在根文件夹中。每 10 秒执行一次检查。

    class WaitForExternal
    {
        string triggerFilePath
        number taskID
        void WaitOnTrigger( object self )
        {
            if ( DoesFileExist( triggerFilePath ) )
            {
                Result( GetTime(1) + ": Triggered! Now act..." )
                If ( TwoButtonDialog( "Do you want to reset the trigger?", "Reset", "Stop" ) )
                {
                    DeleteFile( triggerFilePath )
                }
                else
                {
                    RemoveMainThreadTask( taskID )
                }
            }
            else
            {
                Result( GetTime(1) + ": not yet\n" )
            }
        }
    
        object Init( object self, string triggerPath, number waitSec ) 
        { 
            triggerFilePath = triggerPath
            taskID = self.AddMainThreadPeriodicTask( "WaitOnTrigger", waitSec )
            return self
        }
    }
    
    // Main script
    {
        string triggerPath = "C:\\Trigger.txt"
        number pollingWait = 10
        Alloc(WaitForExternal).Init( triggerPath, pollingWait )
    }
    

    注意,周期性任务在后台空闲等待,不干扰CPU,但实际检查是在主线程上进行的。

    【讨论】:

    • 扩展:从 GMS 3.0.1 开始,还可以通过 DigitalMicrograph.exe 的命令行参数在 DigitalMicrograph 中“启动”脚本。见here
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多