【问题标题】:Setting entry point in DWScript在 DWScript 中设置入口点
【发布时间】:2013-02-27 23:35:49
【问题描述】:

有没有办法在 DWScript 中设置入口点?

例如,如果我开始执行脚本,我希望它执行一个过程 Main,而不是常规入口点中的代码(开始...结束。)。

我知道可以从 Delphi 执行函数,但我不确定这是否完全相同。

【问题讨论】:

    标签: delphi dwscript


    【解决方案1】:

    除了写你的procedure Main();,然后让你的常规脚本入口点只包含调用Main,这可能不是你想的,不,在DWS中没有办法做到这一点。

    尽管在语法上进行了所有创新,但 DWS 仍然是 Pascal,并且仍然以 Pascal 的方式工作。要求某种命名为 Main 的例程将与 Pascal 风格大相径庭。

    编辑:回答 cmets 中发布的说明:

    如果您希望您的脚本生成一个新的脚本线程,您必须在外部 Delphi 代码中处理它。在撰写本文时,DWS 系统还没有内置任何多线程概念。如果您想这样做,您可以这样做:

    创建一个名为SpawnThread(EntryPoint: string) 之类的外部例程。它的 eval 方法(在 Native-Delphi-land 中)会生成一个新线程来加载当前脚本,然后找到具有指定名称的例程并执行它。

    这是在没有语言级别支持的情况下让它工作的唯一方法。如果您想从 DWS 中生成线程,请尝试将其作为功能请求添加到 the issue tracker

    【讨论】:

    • 我的意图不是将此过程用作单个入口点。我想让执行可以调用一个方法,该方法将在单独的线程中开始第二次执行。我遇到的问题是我不确定如何区分初始(主)执行和线程执行,因为线程执行必须以某种方式执行不同的代码。我的想法是在线程的另一个函数中输入执行。
    • 这种方法本质上是我希望做的。在脚本中调用一个函数,该函数在 Delphi 代码中生成一个新线程,该线程在不同的例程中输入脚本。但我不完全确定如何在不再次执行主入口点的情况下实现这一目标?
    • @FHannes:假设您有一个名为 progIDwsProgram 变量。以下语法是您需要的,或者至少足以让您入门:prog.BeginNewExecution.Info.Func['whatever'].Call(params);
    • 我不确定是否可以在不实际开始执行的情况下做到这一点。谢谢。
    【解决方案2】:

    直接调用函数在

    https://code.google.com/p/dwscript/wiki/FirstSteps#Functions

    如果你想在不同的线程中执行一个函数,你需要一些 Delphi 端代码来创建一个新线程,一个新的执行,然后调用你的函数。然后,主执行和线程执行将彼此沙箱化(因此无法共享共享全局变量等)。

    如果您需要在线程之间共享数据,您可以通过公开函数或外部变量来做到这一点,这将在适当的同步和锁定的情况下调用 Delphi 代码(什么是“适当的”取决于您的代码想做的事,就像在多线程中一样...)。

    请注意,可以在脚本执行之间传递对象、接口和动态数组(前提是它们是同一程序的执行),但就像使用常规代码一样,您必须使用锁、临界区或互斥锁明确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多