3

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

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

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

4

2 回答 2

2

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

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

编辑:回答评论中发布的澄清:

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

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

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

于 2013-02-27T23:52:14.630 回答
2

直接调用函数在

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

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

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

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

于 2013-02-28T08:48:33.740 回答